Tag: node postgres

postgres中的大量数据库 – 架构最佳实践

我们在多租户nodejs中使用postgres进行设置。 每个客户端都有一个单独的数据库(和一个单独的节点进程)。 使用node-postgres模块为每个租户实施连接池。 由于数据库数量越来越多,我们很快就达到了postgres的max_connections限制。 无限增加max_connections不是一个选项(由于连接开销)。 大量数据库的体系结构是否应该改变? 任何指针将不胜感激。

什么时候应该在node-postgres中调用done()?

第4.4.3节 我正在使用socket.io连接客户端到服务器。 我猜想,我想在服务器启动时将服务器连接到数据库,但在“docs”中有很多警告:“使用done()或者坏事情会发生”。 我应该什么时候使用它? 如果我打开数据库的连接,然后在其中创buildsocket.io服务器,然后在每个查询后使用done() ,然后我30秒后收到错误空闲: Error: This socket has been ended by the other party 可能是我应该创buildsocket.io,然后在每个用户会话中打开连接到数据库? 或打开连接到每个查询数据库,如果它当前不打开? 诚实,我不明白,为什么我应该这样做,为什么我不能创build单一的连接到服务器启动数据库,并通过它发送所有的查询,而不是这个开闭式重复。

如何在node-postgres的Queryconfiguration对象中用双引号声明一个string

我使用node.js使用Queryconfiguration对象来访问PostgreSQL表; 我想要build立'SELECT * FROM "Customers" WHERE "CustomersID" = 1'是'SELECT * FROM "Customers" WHERE "CustomersID" = 1' ,它可以与数据库一起工作。 现在,这是我正在使用的查询对象; const query = { text: 'SELECT * FROM $1 WHERE "CustomersID" = $2', values : ["Customers",1], } 但是我得到了“$ 1”错误或者接近“$ 1”的语法错误,我用“或/和”尝试了不同的方法,但是对我来说似乎没有用。 将$ 1声明为值数组中双引号的string的正确方法是什么? 感谢Gus

如何检查表是否包含任何行时传递表名称作为参数?

我试图写一个语句来检查一个表是否包含行: SELECT COUNT(*) FROM $1 ; 如果认为我会把表名传入:$ 1 我收到以下错误信息: 在“$ 1”处或附近的语法错误 我的发言有什么错误?

Node-Postgres查询方法不调用它的callback函数

我有以下代码使用node-postgres: var client = new pg.Client(conString); client.connect(function(err) { if(err) { throw new Error(console.error('could not connect to postgres '+ err)); } }); client.query('select * from public.spatial_ref_sys', function(err, result){ console.log('ffdafda'); throw new Error('kokpokopko'); }); 我会想这个代码执行时,'ffdafda'将被打印到屏幕上,并会出现错误消息'kokpokopko'将被抛出。 我甚至在debugging器中停留了一个永不折断的断点。 由于这些事情从来没有发生,我假设callback从来没有被调用。 有什么select我需要为了得到callback被称为? 我正在阅读文档,我什么都看不到。 注意client.query被调用是很重要的。 我已经通过检查它的返回值来certificate它。 非常感谢你!

用Sequelizejs检索多行

我开始学习SequelizeJs,但是我遇到了一个小问题:我有一个定义如下的模型: var ex_table= sequelize.define("ex_table", { concept1: Sequelize.STRING(5), concept2: Sequelize.STRING(80), concept3: Sequelize.STRING, weight: Sequelize.INTEGER, value: Sequelize.DECIMAL(20,2) }, { tableName: "samble_table"}); 从表格中检索单行,我这样做: ex_table .find({where: Sequelize.and({weight: 320193}, {concept1: 'AGLOK'}, {concept2: 'lambda'}, {concept2: 'Industry Group'})}) .complete(function (err, result) { if (!!err) { console.log("An error occurred while creating the table:", err); } else { console.log(result.values); } }) 这给我一行数据,这是预期的。 但是,当我试图像这样检索多行: ex_table […]

节点postgres UTF密码错误

我正在使用https://github.com/brianc/node-postgres pg模块。 显然,我不能使用Unicode密码连接到数据库。 从相同的位置psql连接参数OK。 使用Node.js,它会使password authentication failed for user 。 当我检查与console.log()我确切地看到我的期望。 如果我在数据库和连接string中将密码更改为ASCII,则一切正常。 但我需要旧的Unicode密码被消耗… 我尝试了https://github.com/brianc/node-postgres/wiki/Client new pg.Client({…password: Código 和 conString = "postgres://…Código@" 我知道ODBC( Driver={PostgreSQL UNICODE}; )和JDBC( ;Unicode=true )在连接string中都支持UTF。 我没有发现任何关于Node.js pg模块的UTF支持。 请帮忙。 我看到了http://www.connectionstrings.com/postgresql/并阅读了https://github.com/brianc/node-postgres上的文档。 请帮助这个问题。 谢谢!

如何将MySQL风格的问号`?`绑定参数转换为Postgres风格的`$ 1`绑定参数

我正在将一个现有的项目从MySQL转换到Postgres。 在代码中有相当多的原始SQL文字使用? 作为占位符,例如 SELECT id FROM users WHERE name = ? 但是我得到这个错误: DB query error: error: operator does not exist: character varying = ? 我不想转换所有我现有的SQL ? 到Postgres风格的运营商,如$1 。 是否有某种方式让node-postgres接受问号,或者是一个可以转换为postgres样式参数的工具? 请注意,某种基于正则expression式的hack是不可接受的,因为问号可以在引号内,或者反斜线转义到任何深度。

如何修复多行node-postgres插入 – 在$ 4或附近的语法错误

我有一个多行node-postgres插入,给我的问题。 这是一个参数化查询,它使用公用表expression式来用外键来更新主表和两个表。 该查询与主表的参数一起工作,但是,当我尝试参数化多行的外键表时,会引发语法错误。 首先,我有这个函数接受一个数组并返回一串值。 const buildValues = (id, values) => { return values .map(val => "(" + id + ", '" + val + "', " + false + ")") .join(", "); }; 这是我的查询: app.post('/api/saveperson', function (req, res) { pg.connect(connectionString, (err, client, done) => { const insertPerson = ` WITH x AS ( INSERT INTO […]

在NodeJS中如何将JSON对象保存为带有node-postgres模块的文本?

最后,我从postgresql 9.1前进到支持JSON数据types的postresql 9.3。 然后相同的代码正常工作。 但是,我认为,我想要做的第一个地方可以做…如果有人知道我还是想知道。 环境 节点v0.10.28 pg v3.3.0 postgresql 9.1 我有这个插入查询 INSERT INTO sessions(sid, user_id, session_object) VALUES ('id1', 1, '{"id":"fX2HkXYLclB","data": testing"}') RETURNING session_id 当从pgAdmin(或命令行)testing它时,它工作正常,但是当我的应用程序尝试从pg.client.query运行时,它尝试将对象作为string保存“[object object]”。 这是节点代码: var session = {"id":"fX2HkXYLclB","data": "testing"}; var sql = 'INSERT INTO sessions(sid, user_id, session_object) VALUES (\'id1\', ' + ' 1, \''+JSON.stringify(session)+'\' ) RETURNING session_id'; console.log(sql); client.query(sql, function(err, info) { […]