问题标签 [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 回答
5277 浏览

sql - PostgreSQL 函数返回任意类型

有没有办法让 PostgreSQL 中的函数返回任意类型?

我正在尝试使用 PLV8 从 PostgreSQL 9.2 中的 JSON 类型中获取和比较字段。

以下作品:

返回计数字段<= 10的位置。但是,如果该字段不是数字,它将失败。我不想为我的 json 可能持有的每种类型的数据创建一个特定的函数,有没有办法以某种方式推断数据类型并隐式转换?

另请参阅如何使用新 PostgreSQL JSON 数据类型中的字段进行查询?

0 投票
5 回答
5001 浏览

javascript - V8 和 PostgreSQL 的 Javascript 序列化和性能

我一直在试验 PostgreSQL 和 PL/V8,它们将 V8 JavaScript 引擎嵌入到 PostgreSQL 中。使用它,我可以查询到数据库中的 JSON 数据,这非常棒。

基本方法如下:

使用 V8,我可以将 JSON 数据解析为 JS,然后返回一个字段,我可以将其用作常规 pg 查询表达式。

在大型数据集上,性能可能是一个问题,因为我需要解析数据的每一行。解析器很快,但它绝对是过程中最慢的部分,而且每次都必须发生。

我想要解决的问题(最终解决一个实际问题)是是否有办法缓存或预处理 JSON ......甚至将 JSON 的二进制表示形式存储在 V8 可以使用的表中自动作为 JS 对象可能是一个胜利。我已经研究过使用诸如 messagepack 或 protobuf 之类的替代格式,但我认为它们在任何情况下都不一定会像本机 JSON 解析器一样快。

想法

PG 有 blob 和二进制类型,所以数据可以以二进制形式存储,然后我们只需要一种方法将其编组到 V8 中。

0 投票
1 回答
866 浏览

postgresql - Heroku 托管 PostgreSQL 和 PLV8

有谁知道 Heroku 是否支持 PLV8?我观看了 RailsConf 2012 的一个视频,Heroku 团队的一名成员在这里谈论如何将它与 hstore 一起使用,但我觉得这是他们为内部项目所做的。谷歌“heroku postgresql plv8”并没有真正出现。如果 Heroku 团队的某个人看到了这一点,最好在可能支持的情况下发布任何一般时间表。

0 投票
2 回答
4958 浏览

postgresql - PLV8 是否支持对其他服务器进行 http 调用?

如果我使用 PLV8 为 PostgreSql 编写一个函数,我可以从我的 PLV8 函数调用一个带有 get/post 请求的 url 吗?

0 投票
1 回答
4072 浏览

postgresql - 使用 PostgreSQL、Javascript 库或可重用函数存储和索引 YAML?

PostgreSQL 9.2 具有原生 JSON 支持。但是,我想将人类可读的配置文件存储在 YAML 中。而且我想我想索引一些(但不是全部)配置文件值。因此我想知道:

  1. 是否有可能在 Postgres 中包含 [解析 Yaml 的第三方 Javascript 库],例如js-yaml。然后我可以拥有自己的 YAML Javascript 助手,就像 PostgreSQL 9.2 中内置的 JSON 助手一样。

或者:

  1. 是否可以声明单独的可重用 Javascript 函数?如果是这样,那么我可以添加我自己的 YAML 解析函数(基于简单的正则表达式),它能够解析 YAML 的子集,例如这里的顶级键值对:

    /li>

最坏的情况是我需要在每个 PostgreSQL 存储过程中复制 YAML 解析代码(如果我不能添加 3rd 方库或声明可重用函数)。

(在我的情况下,性能并不是非常重要。)

(我用谷歌搜索了“ postgresql plv8 reusable function ”和“ postgresql plv8 library ”,但没有发现任何相关性)

0 投票
2 回答
879 浏览

javascript - 如何在不使用 plv8.elog() 的情况下获取 plv8 中变量的值?

我在从 plv8.elog() 获取正确输出时遇到问题。刚开始,我在 Ubuntu 12.10 上使用 pgxn 安装的 PostgreSQL 9.2、plv8 1.4.1。我正在构建一个包含嵌套游标循环并使用许多准备好的语句的函数。我正确地关闭了游标并释放了准备好的语句。所有这些功能都会生成一个对象数组,这些对象是将插入许多不同表中的记录。

它发生故障的地方是我使用对象中的数据循环遍历该数组以生成查询字符串。我正处于这部分代码的构建阶段,所以在我通常会执行查询字符串的地方,我尝试将其输出到控制台。这就是腐败发生的地方。

当输出它在我的测试中生成的 9 个查询字符串时,只显示其中的 7 个。当我进入 postgres 日志时,我发现在 2 个缺失的查询字符串的末尾,有一个看起来像带有问号的菱形的字符。基本上是一些在当前字符集中无法显示的字符。我已经测试了查询生成器代码的所有部分,但找不到任何原因。我相信 plv8.elog() 函数或 plv8 引擎的字符串连接功能由于某种原因正在损坏。

我遇到的问题是,如果它是字符串连接功能,我不能相信查询字符串能够正确执行。我已经通过从函数中删除代码并使用数组中的静态信息来测试代码。在这种情况下,它工作正常,所以我知道这部分代码没有问题。

首先,有没有其他人见过这个?plv8.elog() 的损坏或怪异行为?当您的函数达到一定的大小或复杂性时,是否有任何数据损坏?如果是这样,您是否能够找到一种至少解决它的方法?

另外,如果它是 plv8.elog() 函数,还有另一种获取变量值的方法吗?我知道应该有 v8 调试器功能,但我没有成功让它工作。如果有人有让它工作的经验,你能帮我让它工作吗?谢谢。

0 投票
1 回答
675 浏览

postgresql - PostgreSQL:plv8.start_proc

在配置中设置启动过程

创建函数:

在 postgres 用户下一切正常:

结果——约翰,你好!然后创建用户测试并尝试运行该功能:

尝试在执行 plv8_startup 时授予用户测试 - 结果是相同的。怎么了?

0 投票
1 回答
902 浏览

postgresql - 在 postgresql 中实现自定义比较

我在 postgres 表中有一些数据,其中有一列称为版本(类型为 varchar)。我想使用我自己的比较函数对该列进行排序/排序,但我不确定最合适的答案是什么:

  • 我有一个样式 comp(left, right) -> -1/0/1 的 JS 实现,但我不知道如何在 sql order by 子句中使用它(通过 plv8)
  • 我可以编写一个 C 扩展,但我对此并不特别兴奋(主要是出于维护原因,因为用 C 编写比较本身并不会太困难)
  • 其他的 ?

我感兴趣的比较类型类似于包管理器中使用的版本字符串排序。

0 投票
0 回答
694 浏览

postgresql - Postgres plv8 - 自定义错误 - 丢失自定义属性

自定义错误丢失自定义属性

哪些步骤将重现该问题:

创建函数

创建触发函数

在任何表上设置此触发器而不是事件并尝试执行它

我们会看到

什么是预期的输出?

如果我在一个范围内这样做 - 我会得到正确的结果

结果:

0 投票
1 回答
208 浏览

postgresql - plv8 函数忽略不可变严格

我认为不可变的严格限制不能修改数据库。

以下在“some_table”中插入一个新行:

难道不能阻止修改数据库的函数吗?