问题标签 [plv8]

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 回答
871 浏览

postgresql - 如何在 Postgres 的 plv8 函数中返回 JSON 行?

我很难理解这种情况。这是我第一次使用一些内置函数对此进行处理:

到目前为止我尝试过的

对于这个小例子来说效果很好,并且还返回 10 行。如果我取消限制,我将获得所有行。完美的; 但是,这意味着为将数据直接馈送到 Logstash 的视图提供支持,因此有一些自定义业务逻辑可以清理字段并执行其他一些轻量级任务。为了解决这个问题,尝试 plv8 是有意义的

plv8方法:

我已经立即迷路了。我想要做的是选择我需要的具有正确连接的表,清理数据,构建我的 JSON 对象并每行返回一个。在第一种方法中,很明显在查询中我是在一个人的上下文中工作的。在下面的方法中,我似乎正在执行一个查询,该查询选择了我们表中的所有 80M 人。这并不容易。

知道如何使用这种方法来复制我在第一个示例中尝试做的事情吗?

0 投票
2 回答
1354 浏览

postgresql - plv8 JavaScript 语言扩展可以调用第三方库吗?

在 Postgresql 中,我想调用像 moment.js 或 AWS lambda JS Client 这样的第三方库来从数据库中调用无服务器函数。我没有看到任何文档或示例如何这样做: https ://github.com/plv8/plv8/blob/master/README.md

这可能吗?我在哪里可以找到如何“导入”或“需要”其他库的示例?

0 投票
0 回答
322 浏览

sql - PLV8 函数内部的巨大 SQL 查询

在我的 PostgreSQL-9.6-database 中,无论好坏,都有很多 PLV8 函数。我们的一些数据库业务逻辑只需在 JavaScript 中完成。

然而,在这些 PLV8 函数中,有很多普通 SQL 中的数据库查询。如果您考虑小型单线,那绝对没问题。

但是,有时我的 SQL 语句可能包含 400 或 500 行代码。

我知道有两种方法可以做到这一点:

  1. 将 JavaScript 中的查询字符串分解为新行:

    /li>

缺点是:你在 pgAdmin 中丢失了 SQL 语法高亮,存储函数不会立即发现语法错误(你必须先执行才能检测到它们),关于哪一行可能抛出错误的反馈可能不准确。而且很难处理。

  1. 创建一个从 PLV8 函数中调用的 SQL 函数,例如

    plv8.execute('SELECT my_inner_function(id,$2) FROM my_table WHERE some_column = $1',[paramOne,paramTwo]);

但是,据我测试:为主表的每个元素调用一个函数比在该表上执行实际查询要慢。

那么,是否有另一种更好的方法可以在 PLV8 函数中插入“本机”SQL?

0 投票
1 回答
355 浏览

postgresql - 使用带有 PostgreSQL 和 JSONb 输入的 mustache 模板

是时候在模板中使用JSONb 数据类型作为输入,并将 PostgreSQL 查询作为模板系统... Mustache将是完美的,如果有一些用于 PLpgSQL 的 Mustache 实现(或适用于C)...似乎没有人。

但是Javascript-mustache有一个很好的源代码:如何为 PLv8 使用/调整它?

在这样的上下文中多次调用 mustache 的最佳方式(性能)是
SELECT tplEngine_plv8(input_jsonb,tpl_mustashe) as text_result FROM t什么?


测试和讨论注意事项

测试:http: //jsfiddle.net/47x341wu/

因此,使用 VIEW t 我们有一个小胡子模板的名称和标题,

并将其与 JSFiddle 结果进行比较。


性能测试

使用EXPLAIN ANALYZE...也许在测试表中添加数百个随机值。而且,测试还调用策略:一次一个或按数组。

或者

0 投票
0 回答
243 浏览

postgresql - plv8 中断的参数化查询

我一直在尝试让 plv8 在 PostgreSQL 10 上工作(完全干净安装,以前从未使用过)。我创建了一个这样的函数:

当我运行时:

我得到:

错误:错误:没有参数 $0 详细信息:findactivitiesjs() 第 2 行:var queryResult = plv8.execute('SELECT * FROM activities WHERE activityid = SQL state: XX000

我还尝试将 SQL 查询更改为SELECT * FROM activities WHERE activityid = $0相同的结果。这与查询中的参数有关,因为没有 WHERE 子句的 SELECT 语句可以正常工作。

做错了什么?

0 投票
1 回答
297 浏览

sql - Postgres GROUP BY、SUBSTRING 和 SUM 查询问题

我正在尝试编写一个 GROUP BY 查询,但我正在努力实现预期的结果。我包括

  1. 一个 JSON 对象,表示带有一些数据的 DB 表。
  1. 我当前的查询及其结果。
  1. 想要的结果。

差异非常微妙。但是您会看到,我基本上想将“payment_type”和“gl_code”的最后 3 位相同的记录相加。例如“payment_type”:“ Cash ”和“gl_code”:“1234-56-102-056

任何帮助将不胜感激。

0 投票
1 回答
783 浏览

postgresql - 是否可以使用 PostgreSQL plv8 扩展创建可重用函数?

我想将谷歌的开放位置代码 javascript 实现放入 PostgreSQL(使用plv8 扩展),并使其可用于从 PostGIS 几何/地理数据类型进行编码/解码。

虽然我成功了,但我无法弄清楚如何只为https://github.com/google/open-location-code/blob/master/js/src/openlocationcode.js文件创建一个函数最后我将该函数的副本放入每个需要编码/解码加码的函数中。当我试图将其拉出到自己的函数中时,我可以得到一个包含 javascript 的字符串或 [Object],[object] 的字符串,而不是一个可调用的函数。

PostgreSQL 中的 plv8 扩展可以做到这一点吗?

不完整的代码片段示例(此处为完整版):

0 投票
0 回答
21 浏览

postgresql - 我能以某种方式检测到新语句已经开始吗

我有一个 plv8 函数(但我假设同样的事情适用于任何语言)。它可以在一个语句中被调用很多(选择说)。它计算昂贵的东西,所以我不想每次都重新计算。但它计算的内容取决于数据库的内容。我可以天真地在函数中缓存东西,但永远不会被清除。因此,在第一次通话后,我总是对旧数据进行操作。如果在每个语句执行开始时刷新会很好。

请注意,触发对缓存所依赖的表的更改不起作用。缓存存在于connectionA中,可以通过connectionB(或C,...)更改DB

0 投票
0 回答
122 浏览

sql - Postgres 9.6 上的 plv8:以前的 INSERT 结果以后不可用

我们在 PostgreSQL 9.6 中的数据库由一个非常复杂的结构组成,其中包含数百个 PostgreSQL 函数,其中大多数是用 plv8/JavaScript 编写的(如果这种结构有意义,那就不同了。但现在完全重写是不可能的。)

问题是:写入表的记录有时在稍后尝试访问时不可用。

考虑下面的代码片段:

按预期工作,INFO: foo1被淘汰。

但是,想象一下,这不会发生在一个语句中(尤其不是在一个DO块中,这只是为了演示原理),而是考虑到涉及数十个函数,函数 A 调用函数 B 等等。

在某个时刻,在函数 ZI 中,我想检索我在函数 A 中插入的记录(通过参数传递的 ID)——但它不存在。有时也会发生同样的情况UPDATE:我在函数 A 和函数 Z 中运行更新我想获取新内容 - 但是,内容是旧内容 - 就好像UPDATE函数 A 中的语句从未执行过一样。

如果我将整个事情分成单独的语句,一切都会正常工作:如果函数 B 不是从函数 A 中调用的,而是像这样调用的

那么一切总是好的,但在我的情况下这种方法是不可行的。

但是,我不能孤立这种现象。它有时只发生在某些地方。如果发生这种情况,那是可以重现的。

使用的 plv8 版本是 1.4.8。

0 投票
0 回答
193 浏览

postgresql - plv8 二进制文件复制到相应的文件夹,但在加载库时出错,因为找不到指定的过程

错误:无法加载库“C:/POSTGR~1/pg94/../pg94/lib/postgresql/plv8.dll”:找不到指定的过程。SQL状态:XX000

我已经安装了 postgres 9.4.15,想安装 plv8 1.4.3。我已经从 http://www.postgresonline.com/journal/archives/341-PLV8-binaries-for-PostgreSQL-9.4-windows-both-32-bit-and-64-bit.html复制了二进制文件

所有 64 位版本。运行查询后显示错误:CREATE EXTENSION plv8;