Articles of node postgres

nodejs应用程序的node-postgres和pg-promise

我将用Postgresql构build一个Nodejs应用程序作为后端。 我不打算使用像Sequelize这样的ORM, 因为文档和性能问题很糟糕,或者其他ORM – ORM是反模式 。 我发现node-postgres和pg-promise是这方面的候选人。 那么,任何人都可以澄清一个工具比另一个更好的scheme,或者哪一个工具是描述的方式,前提是node-postgres自2010年以来一直在发展,自2015年起pg-promise。

node-postgres:如何在不执行查询的情况下准备一个语句?

我想使用node-postgres模块在postgres中创build一个“准备好的语句”。 我想创build它,而不绑定到参数,因为绑定将发生在一个循环。 在我阅读的文档中 : query(object config, optional function callback) : Query If _text_ and _name_ are provided within the config, the query will result in the creation of a prepared statement. 我试过了 client.query({"name":"mystatement", "text":"select id from mytable where id=$1"}); 但是当我尝试只传递configuration对象中的文本和名称键,我得到一个exception: (已翻译)消息绑定了0个参数,但准备好的语句需要1个 有什么我失踪? 你如何创build/准备一个陈述,而不将其绑定到具体的价值,以避免在循环的每一步重新准备陈述?

使用node-postgres将文件存储在postgres中

我正在尝试使用node-postgres模块将一个小文件存储到postgres数据库中。 我明白,我应该使用bytea数据types来做到这一点。 我遇到的问题是当我做一些事情时: fs.readFile path, (err, data) -> client.query 'UPDATE file_table SET file = $1 WHERE key = $2', [data, key], (e, result) -> …. 数据库中文件列的内容是:\ x并且不存储任何内容。 如果我更改数据缓冲区为hex即data.toString('hex')文件存储,但所有格式都会丢失,当我读取文件退出。 使用node-postgres模块将文件存储到postgres中的正确方法是什么?

与Bluebird手动promisifying pg.connect

我想promisify node-postgres'pg.connect方法以及callback中提供的内部connection.query方法。 我可以将后者进行修改,但是我需要手动执行第一个(如果我在这里丢失了某些东西,请解释一下)。 事情是,我不确定这段代码是否正确或应该改进? 代码工作,我只是想知道,如果我使用蓝鸟的意思。 // aliases var asPromise = Promise.promisify; // save reference to original method var connect = pg.connect.bind(pg); // promisify method pg.connect = function (data) { var deferred = Promise.defer(); connect(data, function promisify(err, connection, release) { if (err) return deferred.reject(err); // promisify query factory connection.query = asPromise(connection.query, connection); // resolve promised connection […]

节点服务器无法连接到postgres数据库

我最近从MySQL切换到postgres作为我的数据库node.js项目。 虽然我能够从我的本地pgAdmin III(OSX)客户端到达远程postgres数据库,但到目前为止,我一直无法通过node.js连接到我的数据库。 我确定我为pgAdmin和我的node.jsinput的凭据是完全相同的。 我试过的另一件事是设置我的本地ipadress信任在我的数据库服务器的pg_hba.conf中的md5。 有什么我做错了吗? 我最喜欢的search引擎提出了一些关于重置我的本地操作系统的令人担忧的命中。 我只是使用了node-postgres的github repo文档中的例子: var pg = require('pg'); var conString = "postgres://myusername:mypassword@hostname:5432/dbname"; var client = new pg.Client(conString); client.connect(function(err) { if(err) { return console.error('could not connect to postgres', err); } client.query('SELECT NOW() AS "theTime"', function(err, result) { if(err) { return console.error('error running query', err); } console.log(result.rows[0].theTime); client.end(); }); }); 这些是我每次尝试启动服务器时遇到的错误: could […]

错误关系不存在

我得到一个[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使用和操作它更容易