Tag: node postgres

错误关系不存在

我得到一个[error: relation "causes" does not exist]错误从我的节点的应用程序。 这个关系确实存在,我不确定问题是什么。 我创build了表 CREATE TABLE causes ( cause_id bigint NOT NULL default nextval('causes_cause_id_seq'::regclass), cause_name varchar(40) NOT NULL, goal integer, sponsor varchar(30), organization varchar(30), submitter varchar(30), address varchar(34), balance numeric ); 这是给出错误的查询: 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) RETURNING […]

使用node-postgres在utc中获取Postgres的“没有时区的时间戳”

我有一些时间戳存储为Postgrestypes的timestamp without time zone 。 我将以2013-12-20 20:45:27时间戳为例。 我打算这代表一个UTC时间戳。 在psql中,如果我运行查询SELECT start_time FROM table_name WHERE id = 1 ,我得到的时间戳string,如预期: 2013-12-20 20:45:27 。 但是,如果在我的Node应用程序中,我使用node-postgres库来运行相同的查询,我会在当地时区取回一个时间戳: Fri Dec 20 2013 20:45:27 GMT-0600 (CST) 。 这是一个Javascriptdate对象,但它已经存储为该时区。 我真正想要的是一个date对象(甚至只是一个string),代表2013-12-20 20:45:27 GMT+0000 。 我已经知道这一次是UTC。 我已经尝试在我的postgresql.conf文件中设置时区参数: timezone = 'UTC' ,结果没有区别。 我究竟做错了什么? 编辑 这个问题似乎是在这个文件中: https : //github.com/brianc/node-postgres/blob/master/lib/types/textParsers.js 如果从Postgres返回的datestring没有指定时区(即Z ,或+06:30 ,那么它只是构build一个JavaScriptdate对象,我相信这只会包括本地时区。更改我的应用程序以在DB中存储时区或覆盖此转换器。

我如何正确地插入多个行与PG节点postgres?

单行可以像这样插入: client.query("insert into tableName (name, email) values ($1, $2) ", ['john', 'john@gmail.com'], callBack) 这种方法自动评论任何特殊字符。 我如何一次插入多行? 我需要实现这个: "insert into tableName (name, email) values ('john', 'john@gmail.com'), ('jane', 'jane@gmail.com')" 我可以只使用jsstring运算符手动编译这样的行,但是我需要添加特殊字符转义莫名其妙。

节点postgres与大量的查询

我刚开始使用node-postgres和node.js一起使用postgres。 我试图做的事情之一是写一个简短的js填充我的数据库,使用约20万条目的文件。 我注意到有一段时间(不到10秒),我开始得到“错误:连接终止”。 我不确定这是否是使用node-postgres的问题,或者是因为我发送了postgres垃圾邮件。 无论如何,这是一个简单的代码,显示了这种行为: var pg = require('pg'); var connectionString = "postgres://xxxx:xxxx@localhost/xxxx"; pg.connect(connectionString, function(err,client,done){ if(err) { return console.error('could not connect to postgres', err); } client.query("DROP TABLE IF EXISTS testDB"); client.query("CREATE TABLE IF NOT EXISTS testDB (id int, first int, second int)"); done(); for (i = 0; i < 1000000; i++){ client.query("INSERT INTO testDB VALUES […]

在node.js中导入sql文件并针对PostgreSQL执行

我正在寻找一种有效的方法来获取一个原始的sql文件,并同步执行一个postgres数据库,类似于如果你通过psql运行它。 我有一个创build所有数据库,导入数据等sql文件我需要执行此使用node.js,但无法find任何模块,这会自动执行此操作。 对于node.js应用程序本身,我们使用node-postgres('pg'),knex.js和bookshelf.js。 我认为,尽pipe这是最好的。 我可以想到的另一种方法是读取完整的文件,用分号分隔,用空格replace换行符,修剪任何重复的空格,然后按照连续执行而不是asynchronous的方式逐个提交给pg。 如果这真的是最有效的方法,而且如果还没有图书馆来解决这个问题的话,我有点惊讶。 我有点犹豫,跳入它看到SQL语法本身可能是一个有点具有挑战性,我可能会意外地混搭起来。 事先澄清一下: psql不能使用,因为它没有安装在目标机器上 我select以sql本机forms开发和源代码控制sql语句,因为DBA使用和操作它更容易

如何在服务器中使用node-postgres?

我在写一个使用Postgres数据库的Node.js Web服务器。 我曾经连接每个新的请求,像这样: app.get('/', function (req, res) { pg.connect(pgconnstring, function (err, client) { // … }); }); 但是经过几次请求,我发现在尝试连接时Heroku上出现“内存不足”的错误。 我的数据库只有10行,所以我不明白这是如何发生的。 我所有的数据库访问都是这种forms: client.query('SELECT * FROM table', function (err, result) { if (err) { res.send(500, 'database error'); return; } res.set('Content-Type', 'application/json'); res.send(JSON.stringify({ data: result.rows.map(makeJSON) })); }); 假设内存错误是由于有几个持久连接到数据库,我切换到我在几个node-postgres例子中看到的样式,只是在文件的顶部连接一次: var client = new pg.Client(pgconnstring); client.connect(); app.get('/', function (req, res) { […]

用于PostgreSQL连接nodejs的SSL

我试图连接到我的Heroku PostgreSQL数据库,我不断收到SSL错误。 有没有人有关于如何在连接string中启用SSL的想法? postgres://user:pass@host:port/database; 一直在寻找它,但它似乎并不是一个非常受欢迎的话题。 顺便说一下,我正在运行Nodejs和node-pg模块及其连接池方法: pg.connect(connString, function(err, client, done) { /// Should work. }); 非常感谢意见。

连接到Heroku PostgreSQL数据库时validation错误

我正在开发一个使用PostgreSQL的Node.js应用程序,并在Heroku上托pipe。 我的问题是,我得到这样的authentication错误: 14:32:05 web.1 | { [error: no pg_hba.conf entry for host "193.40.244.196", user "username", database "database_name", SSL off] 14:32:05 web.1 | length: 168, 14:32:05 web.1 | name: 'error', 14:32:05 web.1 | severity: 'FATAL', 14:32:05 web.1 | code: '28000', 14:32:05 web.1 | detail: undefined, 14:32:05 web.1 | hint: undefined, 14:32:05 web.1 | position: undefined, 14:32:05 […]

node-postgres:如何执行“WHERE col IN(<dynamic值列表>)”查询?

我试图执行这样的查询: SELECT * FROM table WHERE id IN (1,2,3,4) 问题是,我想过滤的ID列表不是不变的,每次执行都需要不同。 我也需要逃避ID,因为它们可能来自不受信任的来源,尽pipe我会实际上逃避查询中的任何事情,而不考虑来源的可信度。 node-postgres似乎只能使用绑定的参数: client.query('SELECT * FROM table WHERE id = $1', [ id ]) ; 这将工作,如果我有一个已知的数值( client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ]) ),但不能用于数组直接client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ]) ,因为似乎没有任何特殊的数组参数处理。 根据数组中的项目数量dynamic地构build查询模板,并将ids数组扩展到查询参数数组(在我的实际情况中,除了id列表外,还包含其他参数)看起来不合理的负担。 对查询模板中的id列表进行硬编码似乎也不可行,因为node-postgres不提供任何值转义方法。 这似乎是一个非常常见的用例,所以我的猜测是我实际上忽略了一些东西,而不是在node-postgres中使用常见的IN […]