问题标签 [node-postgres]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Postgresql中带有json数组的参数化查询
我想使用参数化查询将 array_prepend 调用到 json[] 中。我正在使用 pg-promise npm 包,但这在引擎盖下使用了普通的 node-postgres 适配器。
我的查询是:
与“$ 1”相同。
它适用于非参数化查询。
上面的代码产生:
{ [错误:“hiya”处或附近的语法错误]
这样做的主要原因是为了避免 sql 注入(文档说它们在使用参数化查询时充分转义)。
postgresql - pg转储后插入表中
我曾经pg_dump
在新数据库中填充一个表。之后,我希望能够使用default autoincrementer
序列键将行插入表中。这是我在表中的内容:
在此table (smtable)
,a
是键(设置为serial
)。
现在,当我执行以下语句时:
我收到以下错误:
我如何让这个语句插入next_key
表..
node.js - 为什么 Node.js Postgres Wiki 示例在每个 http 请求中插入多条记录?
我们正在为我们的应用程序使用node-postgres(pg
在 NPM 上)但是遇到了问题,所以我们决定回到Wiki 上的示例:
当我们运行该示例时,每个 http请求都会将两条记录插入 Postgres(“访问”)表中。这是期望的行为...?
我们将示例代码发布到 Heroku:https
://node-postgres-example.herokuapp.com
(注:使用 谷歌浏览器访问)
注意:我们对 Wiki 中的代码进行了 3 处更改,server.js
以使其在 Heroku 上运行,这是在 GitHub 上:https ://github.com/dwyl/postgres-connection-pool-test
(我们对 server.js 所做的更改纯粹是为了(1)创建visit
表(如果它不存在),(2)从中获取 postgres 连接字符串process.env.DATABSE_URL
,(3)process.env.PORT
在 Heroku 上监听。所有其余的代码是根据 Wiki 示例)
node.js - Postgresql:我可以用命令行连接,但不能用 node-postgres
当我使用 CLI 连接到我的数据库时,一切正常。
psql 询问我之前设置的密码(使用 ALTER),然后我就连接上了。
在我的 pg_hba.conf 文件中,我得到以下行:
但是当我使用 node-postgres 尝试相同的事情时,我总是会得到一个错误:
我使用的代码是基本的(假设我的密码是 mypwd)
你有什么想法?
[编辑:我的完整 pg_hba.conf]
node.js - Webpack 不能使用 __dirname?
我正在尝试使用 node-postgres 将我的应用程序连接到 Postgres。我使用的代码是:
它会产生错误:
控制台中提供的 index.js 上的路径是 webpack:///./~/pg/~/pgpass/lib/index.js:5
我在如何使用 node webkit js 编写文件时尝试了@Renzo Poddighe 解决方案?但我仍然得到同样的错误。我认为这可能与https://github.com/nwjs/nw.js/wiki/Differences-of-JavaScript-contexts#resolving-relative-paths-to-other-scripts和https 的讨论有关: //github.com/nwjs/nw.js/issues/264。他们说
和
__dirname 在 Node.js 模块中工作,即在使用 require() 调用的 JavaScript 代码中。__dirname 不仅仅在 WebKit 脚本中起作用,即在使用 HTML 或 jQuery 的 $.getScript() 或任何其他类似方法调用的 JavaScript 代码中。
有任何想法吗?让我知道我需要包括哪些其他信息。
编辑
我想我的目标是
我的 webpack.config.js 看起来像:
node.js - 使用临时表调用 postgres 函数的节点导致“内存泄漏”
我有一个 node.js 程序调用 Postgres(Amazon RDS 微实例)函数,get_jobs
在事务中,每秒 18 次使用node-postgres
brianc 的包。
节点代码只是briinc 的基本客户端池示例的增强版,大致类似于...
所以 Postgres 得到:
...每 55 毫秒重复一次。
get_jobs
是用临时表写的,像这样
我使用了临时表模式,因为我知道这jobs
将始终是从 中提取的一小部分行really_big_table_1
,希望这将比具有多个连接和多个 where 条件的单个查询更好地扩展。(我在 SQL Server 上使用这个效果很好,我现在不信任任何查询优化器,但请告诉我这是否是 Postgres 的错误方法!)
查询在小表上运行 8 毫秒(从节点测量),有足够的时间在下一个开始之前完成一个作业“轮询”。
问题:以这种速度进行大约 3 小时的轮询后,Postgres 服务器内存不足并崩溃。
我已经尝试过的...
如果我在没有临时表的情况下重新编写函数,Postgres 不会耗尽内存,但我经常使用临时表模式,所以这不是解决方案。
如果我停止节点程序(它会终止用于运行查询的 10 个连接),内存就会释放。仅仅让节点在轮询会话之间等待一分钟不会产生相同的效果,因此显然 Postgres 后端与池连接相关联的资源正在保留。
如果我运行一段
VACUUM
时间轮询正在进行,它对内存消耗没有影响,并且服务器继续死亡。降低轮询频率只会改变服务器死机之前的时间量。
DISCARD ALL;
在每个之后添加COMMIT;
都没有效果。在s 上显式调用
DROP TABLE jobs; DROP TABLE jobs_extra;
afterRETURN query ()
而不是s。服务器仍然崩溃。ON COMMIT DROP
CREATE TABLE
根据 CFrei 的建议,添加
pg.defaults.poolSize = 0
到节点代码中以尝试禁用池。服务器仍然崩溃,但与之前所有看起来像下面的第一个峰值的测试相比,花费的时间和交换时间要长得多(第二个峰值)。后来我发现pg.defaults.poolSize = 0
可能无法按预期禁用池。
基于此:“临时表无法通过 autovacuum 访问。因此,应通过会话 SQL 命令执行适当的清理和分析操作。”,我尝试从
VACUUM
节点服务器运行VACUUM
会话”命令)。我实际上无法让这个测试工作。我的数据库中有许多对象,并且VACUUM
对所有对象进行操作时,执行每个作业迭代所花费的时间太长。只限于VACUUM
临时表是不可能的 - (a) 你不能运行VACUUM
在事务中和(b)在事务之外,临时表不存在。:P 编辑:稍后在 Postgres IRC 论坛上,一个有用的小伙子解释说 VACUUM 与临时表本身无关,但对于清理从pg_attributes
该 TEMP TABLES 原因创建和删除的行很有用。无论如何,VACUUMing“在会话中”不是答案。DROP TABLE ... IF EXISTS
之前CREATE TABLE
,而不是ON COMMIT DROP
。服务器仍然死机。CREATE TEMP TABLE (...)
而insert into ... (select...)
不是CREATE TEMP TABLE ... AS
, 而不是ON COMMIT DROP
。服务器死机。
那么ON COMMIT DROP
不是释放所有相关资源吗?还有什么可以保存记忆?我该如何释放它?
node.js - out 参数结果由节点 pg 模块返回 - postgresql
我在 postgresql 中创建了一个过程,如下所示。
现在我已经从节点 pg 执行了这个过程
以前,当我执行上面的代码时,它给了我以下格式的结果。
但是现在我已经卸载了 node pg 模块并再次安装了 node pg 模块。它给了我以下格式的结果
因此,不同之处在于不是返回记录的名称值对,而是返回函数名称和值数组。我尝试安装不同版本的节点 pg 模块,但问题仍然存在。
提前致谢。
node.js - Node-Postgres:使用 Express 时程序在 30 秒后无法运行,没有 Express 没有问题
我正在使用 node-postgres 从 NodeJS 连接到 Postgres 数据库;Cannot read property 'rows' of undefined
在运行程序 30 秒后(在第一次请求服务器之后),它给出了一个奇怪的错误。如果我不使用 Express,错误就会消失。
我已经剥离了代码以重现错误:
在此代码示例上运行curl -X GET http://localhost:8080/
前几次运行良好,然后在 30 秒后(第一次运行后)失败并给出以下错误:
如果我在不使用 Express 的情况下重写相同的程序,它就可以无限期地正常工作。
除了使用 Express 之外,代码是相同的。我真的很困惑。我的猜测是它可能与缓存有关,尽管为什么当我不使用 Express 时它会消失,这超出了我的理解。一个修复,或者如何解决这个问题(同时仍然使用 Express)将不胜感激!