问题标签 [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.

0 投票
1 回答
2296 浏览

node.js - Postgresql中带有json数组的参数化查询

我想使用参数化查询将 array_prepend 调用到 json[] 中。我正在使用 pg-promise npm 包,但这在引擎盖下使用了普通的 node-postgres 适配器。

我的查询是:

与“$ 1”相同。

它适用于非参数化查询。

上面的代码产生:

{ [错误:“hiya”处或附近的语法错误]

这样做的主要原因是为了避免 sql 注入(文档说它们在使用参数化查询时充分转义)。

0 投票
1 回答
36 浏览

postgresql - pg转储后插入表中

我曾经pg_dump在新数据库中填充一个表。之后,我希望能够使用default autoincrementer序列键将行插入表中。这是我在表中的内容:

在此table (smtable)a是键(设置为serial)。

现在,当我执行以下语句时:

我收到以下错误:

我如何让这个语句插入next_key表..

0 投票
3 回答
2403 浏览

node.js - node-postgres:查询未按顺序执行

我将插入和更新代码保存在 2 个不同的文件中,并且根据条件始终插入应该先执行然后更新。但不知何故先执行更新然后插入

test.js:简化代码

我正在使用这些包:pguuid

输出

笔记 :

这个问题可以通过使用异步轻松解决。但是我的插入代码和更新代码在不同的文件中,根据某些情况更新代码可能会执行。所以不想使用异步

问题

即使插入查询首先执行,为什么更新在输出中首先完成

我错过了什么..?

0 投票
2 回答
138 浏览

node.js - 为什么 Node.js Postgres Wiki 示例在每个 http 请求中插入多条记录?

我们正在为我们的应用程序使用node-postgrespg在 NPM 上)但是遇到了问题,所以我们决定回到Wiki 上的示例:

https://github.com/brianc/node-postgres/wiki/Example

当我们运行该示例时,每个 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 示例

0 投票
2 回答
827 浏览

node.js - Postgresql:我可以用命令行连接,但不能用 node-postgres

当我使用 CLI 连接到我的数据库时,一切正常。

psql 询问我之前设置的密码(使用 ALTER),然后我就连接上了。

在我的 pg_hba.conf 文件中,我得到以下行:

但是当我使用 node-postgres 尝试相同的事情时,我总是会得到一个错误:

我使用的代码是基本的(假设我的密码是 mypwd)

你有什么想法?

[编辑:我的完整 pg_hba.conf]

0 投票
1 回答
11462 浏览

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-scriptshttps 的讨论有关: //github.com/nwjs/nw.js/issues/264。他们说

__dirname 在 Node.js 模块中工作,即在使用 require() 调用的 JavaScript 代码中。__dirname 不仅仅在 WebKit 脚本中起作用,即在使用 HTML 或 jQuery 的 $.getScript() 或任何其他类似方法调用的 JavaScript 代码中。

有任何想法吗?让我知道我需要包括哪些其他信息。

编辑

我想我的目标是

我的 webpack.config.js 看起来像:

0 投票
2 回答
2399 浏览

postgresql - postgres:从带有参数的查询中获取可执行查询

有没有办法从带有 $ 参数的查询中获取可执行查询。实际上它很奇怪,但我想将可执行查询存储在数据库中。没有参数的完整查询($1,$2,$3)

我正在使用节点 postgres

这就是我需要的

0 投票
2 回答
3082 浏览

node.js - 使用临时表调用 postgres 函数的节点导致“内存泄漏”

我有一个 node.js 程序调用 Postgres(Amazon RDS 微实例)函数,get_jobs在事务中,每秒 18 次使用node-postgresbrianc 的包。

节点代码只是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 DROPCREATE TABLE

  • 根据 CFrei 的建议,添加pg.defaults.poolSize = 0到节点代码中以尝试禁用池。服务器仍然崩溃,但与之前所有看起来像下面的第一个峰值的测试相比,花费的时间和交换时间要长得多(第二个峰值)。后来我发现pg.defaults.poolSize = 0 可能无法按预期禁用池

在 Postgres 服务器上交换内存使用情况

  • 基于:“临时表无法通过 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不是释放所有相关资源吗?还有什么可以保存记忆?我该如何释放它?

0 投票
1 回答
591 浏览

node.js - out 参数结果由节点 pg 模块返回 - postgresql

我在 postgresql 中创建了一个过程,如下所示。

现在我已经从节点 pg 执行了这个过程

以前,当我执行上面的代码时,它给了我以下格式的结果。

但是现在我已经卸载了 node pg 模块并再次安装了 node pg 模块。它给了我以下格式的结果

因此,不同之处在于不是返回记录的名称值对,而是返回函数名称和值数组。我尝试安装不同版本的节点 pg 模块,但问题仍然存在。

提前致谢。

0 投票
1 回答
1032 浏览

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)将不胜感激!