Articles of node postgres

如何通过客户端库(Postgres)在SQL查询中传递元组(不是数组)作为WHERE约束参数?

我已经经验地发现,PostgreSQL可以让你创build'元组'(术语,我不知道他们叫什么)在WHERE中定义一个多列条件: update T set x=true where (a_id, b_id) IN ((3428, 3544), (3450, 3542)); 这似乎正是我所希望的: x更新在哪里a_id =元组中的第一项AND b_id =元组中的第二项。 这接近于有用,但为了真正重要,我必须能够将这些“元组”设置为来自客户端库的参数; 特别是在这种情况下的node-pg 。 是否有可能将$ 1绑定到以下查询中的某些内容,例如$ 1是0个或更多对a_id和b_id ? client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN $1"), […?]) 如果没有,我至less可以这样做 client.query("UPDATE t SET x=true WHERE (a_id, b_id) IN ($1, $2, …$N)", [ a1b1, a1b2, …aNbN ]) ?

错误:没有参数$ 1

当我尝试使用node-postgres客户端运行此代码时,出现“错误:没有参数$ 1”: app.post('/newcause', function (req,res){ console.log(req.body); var g; var r = []; for (g in req.body) { r[g]=req.body[g]; console.log('r[g] is ' + r[g]); } client = pg.connect(connectionString, function(err, client, done){ if(err) console.log(err); client.query('INSERT INTO causes (cause_name, goal, organization, sponsor, submitter) VALUES ($1,$2,$3,$4,$5)', r, function(err){ console.log('This is r' + r) if (err) console.log(err); }); }); }); […]

将自定义types的数组传递给来自node-pg和SQL注入的postgres函数

CREATE TYPE phototable AS ( photoid integer, parentid integer, fileextension character varying(20), description text, tag character varying(100) ); CREATE FUNCTION addphotos( p_placeid integer , p_permissiontypeid integer , p_description text DEFAULT NULL::text , p_photos phototable[] DEFAULT NULL::phototable[]) BEGIN …….. END 我通过生成一个SQL查询从node.js(使用node-postres)调用这个函数。 我想避免它,并希望使用参数化查询,因为我认为这是不安全的SQL注入攻击。 我无法find一种方法将自定义types数组传递给node-postgres的查询方法。 有没有办法将自定义types数组传递给node-postgres的查询function? 查询: select * from addphotos(p_placeid:=2210, p_permissiontypeid:=2, p_description:='Party', p_photos:=array[row(null, null,'.JPG','smart','6e8f74b2-4c14-4f40-ae19-8abae026a539'), row(null, null,'.JPG',null,'c4e9f75f-25fa-4893-82f1-44c4791d58e5')]::phototable[]);

将嵌套的JSON从多个到多个从PostgreSQL连接到Node.js的表中返回

任何人都可以帮助我查询postgres中的许多关系表吗? 我有桌子: > 1.exercise(id,name) > 2.tag(id,label) > 3.tag_in_exercise(id,exercise_id,tag_id) 比方说,我们有一个练习通过tag_in_exercise绑定了两个标签 当使用查询时: select e.id,t.label from exercise e left join tag_in_exercise te on e.id=te.exercise_id left join tag t on te.tag_id=t.id 我会收到JSON [ { id: 1, label: 'basic1' }, { id: 1, label: 'basic2' }] 但我想收到它作为嵌套的JSON [ { id: 1, tags:[ {'basic1'},{'basic2'} ] }] 是否有可能通过使用standat postgresql查询或我需要使用一些ORM? 或者如果存在另一个解决scheme,请让我知道, 谢谢

node-postgres:caching的参数化插入查询,在第二次运行时失败

我试图运行两个使用node-postgres的参数化插入查询:第一个指定主键列,第二个没有。 第二个查询,即使没有指定主键列,失败说,有一个重复的主键。 我的PG表: CREATE TABLE teams ( id serial PRIMARY KEY, created_by int REFERENCES users, name text, logo text ); 重现此问题的代码: var pg = require('pg'); var insertWithId = 'INSERT INTO teams(id, name, created_by) VALUES($1, $2, $3) RETURNING id'; var insertWithoutId = 'INSERT INTO teams(name, created_by) VALUES($1, $2) RETURNING id'; pg.connect(process.env.POSTGRES_URI, function (err, client, releaseClient) { […]

out参数结果由节点pg module – postgresql返回

我已经在postgresql中创build了一个过程如下。 CREATE OR REPLACE FUNCTION public.functiontest2( IN data numeric, OUT result numeric, OUT result1 numeric) RETURNS record AS $BODY$ DECLARE declare SEQVAL decimal := 10; BEGIN result=SEQVAL; result1=data; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; 现在我已经从节点pg执行了这个程序 client.query('select functionTest2(10)', input, function(err, result){}); 以前,当我执行上面的代码时,它给了我以下格式的结果。 { "command":"SELECT", "rowCount":1, "oid":null, "rows":[{"result":"10"},{"result1":"10"}], "fields":[{"name":"result","tableID":0,"columnID":0,"dataTypeID":1700,"dataTypeSize":-1,"dataTypeModifier":-1,"format":"text"}], "_parsers":[null], "rowAsArray":false } 但是现在我已经卸载了节点pg模块并重新安装了节点pg模块。 这是给我以下格式的结果 { "command":"SELECT", […]

在节点上如何执行插入如果不存在

我的restapi调用请求这个函数在Postgre-sql上创buildfirebase标记。 但是,我意识到只要令牌刷新,就会为同一个用户添加一个新行。 我如何做到这一点,以便它将执行一个插入,如果它存在和更新,如果它不。 我已经尝试了冲突更新,但它不起作用。 代码在这里: function createUserToken(req, res, next) { var userid = req.user.email; db.none('insert into fcmdb(userid, token)'+ 'values($1, $2) on conflict update', [userid,req.body.token]) .then(function () { res.status(200) .json({ status: 'success', message: 'Inserted token' }); }) .catch(function (err) { return next(err); }); }

如何结束“pg-promise”应用程序

我正在尝试编写基于请求有效负载的REST API来select数据库并执行某些操作。 根据文档,我将在操作结束时释放共享连接对象,然后通过结束pgp应用程序来完成操作。 var pgp = require('pg-promise')(); var connection = { user: 'generaluser', //env var: PGUSER database: 'seeddb', //env var: PGDATABASE password: '$$$$$$$', //env var: PGPASSWORD host: 'localhost', // Server hosting the postgres database port: 5432 //env var: PGPORT }; var sco; module.exports = { getuser: function(req, res) { Account.findOne({ select: [ 'database' ], where: […]

webpack与node-postgres导入错误('pg'.Client)

试图用Webpack捆绑下面的文件失败 错误:./~/pg/lib/native/index.js模块未find:错误:无法parsing模块'pg-native'in … / node_modules / pg / lib / native @ ./~/pg/lib/ native / index.js 9:13-33 我在.babelrc尝试了几个ignore语句,但没有得到它运行… 我想捆绑的testing文件: handler.js const Client = require('pg').Client; console.log("done"); webpack.config.js module.exports = { entry: './handler.js', target: 'node', module: { loaders: [{ test: /\.js$/, loaders: ['babel'], include: __dirname, exclude: /node_modules/, }] } }; .babelrc { "plugins": ["transform-runtime"], "presets": ["es2015", "stage-1"] […]

连接池使用pg-promise

我使用Node js和Postgresql,并试图在连接实现中最有效率。 我看到pg-promisebuild立在node-postgres之上,node-postgres使用pg-pool来pipe理共享池。 我还读到,“一次有100多个客户是非常糟糕的”( node-postgres )。 我正在使用pg-promise并想知道: 对于非常大的数据负载,推荐的poolSize是多less? 如果poolSize = 100并且应用程序同时获得101请求(甚至更多),会发生什么情况? Postgres是否处理这个命令并且使得这个请求等到它可以运行?