问题标签 [postgresql-extensions]

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

c - 如何使用内部类型为 PostgreSQL 编写自定义结构数据类型

我正在使用 PostgreSQL 9.6。我想在 PostgreSQL 上创建一个新的货币类型扩展,其中包含一个字符串和一个数值。

根据文档https://www.postgresql.org/docs/9.6/static/sql-createtype.html,我可以直接在 PostgreSQL 中使用 compose 类型,但这不是我想要的,因为我希望能够表示使用字符串的类型并进行强制转换。所以解决方案是创建一个自定义类型,例如示例“box”类型。文档显示:

但是对于如何编写这样的函数并没有真正的帮助。进一步搜索显示该函数只能用 C 编写,并显示简单类型的示例,而不是结构类型。

所以我基本上想要类似的东西

我想使用固定类型的数字,这样可以避免我实现 varlena 标头的额外工作。此外货币通常有固定的小数点。我还希望能够在内部使用 Numeric 类型,因为它允许我重用 Numeric 的功能。

如何使用 Numeric,以便可以使用与 PostgreSQL 类似的语法(例如 Numeric(10,2))来定义我的结构?我可以在 currency_in 函数中使用 numeric_in 函数吗?

0 投票
0 回答
585 浏览

postgresql - debian 上的 postgres 扩展 pg_background

我有几台服务器需要安装扩展名为 pg_background 的 postgres 9.6。但是这个扩展不在“postgresql-contrib”包中。扩展源和说明在这里: https ://github.com/vibhorkum/pg_background

关键是根据说明,有必要在每台服务器上下载和编译源代码。

有没有办法在获得某种存档后“编译”源代码,然后将其复制并安装到所有服务器?我的意思是,我不想下载源代码并在每台服务器上编译它。

0 投票
1 回答
371 浏览

postgresql - Postgresql:无法在 Amazon RDS 上安装 HTTP 扩展

我正在尝试从 API 获得对 Postsgresql 的响应。为此,我安装了相应的 HTTP 扩展

http://www.postgresonline.com/journal/archives/371-http-extension-for-windows-64-and-32-bit.html

在我的本地系统中。当前的问题是我的数据库服务器在亚马逊 AWS 上。所以现在我想在服务器上复制相同的文件/模块。但我对此知之甚少。虽然我试过

然后在我尝试通过使用它来了解支持的扩展之后

然后我没有在HTTP那里找到扩展名。

所以请让我知道如何将下载HTTP的扩展文件放在亚马逊 rds 上?

0 投票
1 回答
479 浏览

c - PostgreSQL 的 C 语言函数的字符串操作

我想创建一个 postgresql c-Language 函数,其参数和返回值是 varchar 并且在处理过程中使用 Char []。

但是,它没有按预期工作。

我做了一个这样的c程序。

并且,创建了这样一个脚本。

执行结果是这样的。

执行环境:

  • Windows 服务器 2012 R2 x64
  • PostgreSQL 9.5.9,由 Visual C++ build 1800 编译,64 位

我是第一次使用 C 语言,所以很高兴提供示例代码。

对不起,我的英语不好。

0 投票
1 回答
2087 浏览

postgresql - Docker - 如何在 Docker 容器中制作/安装扩展?

我正在使用该posgres:10.0图像在容器内运行 PostgreSQL。我的docker-compose.yml看起来相当简单:

postgresql.sh

对于我的项目,我们将开始使用 Multicorn 扩展,参见http://multicorn.org/。要制作/制作安装它,我需要这样做:

然后,我可以添加一个multicorn.sql脚本并将其添加到/docker-entrypoint-initdb.d/目录中,该目录将在 Docker 容器启动时调用:

但是如何在 Docker 容器中制作/制作安装 Multicorn?理想情况下,我想继续使用posgres:10.0而不是发明/创建我自己的版本,因为我不想继承维护的麻烦。

0 投票
2 回答
62 浏览

sql - 如何检测视图是否由扩展创建?

在 PostgreSQL 中,如何知道特定视图是否由扩展创建?

必须执行什么 SQL 查询才能找出答案?没有手动解决方案。

0 投票
1 回答
267 浏览

c - 来自 PostgreSQL 中 C 扩展的“CREATE SCHEMA foo ...”查询(使用 SPI_execute_with_args)

我正在尝试使用服务器编程接口 (SPI) 从为 PostgreSQL 构建的 C 扩展执行 SQL 查询。查询应该创建一个包含大量表的新模式。(基本上它应该为用户设置一个工作区。)但是由于用户应该能够创建多个工作区,所以在编写脚本时我不知道架构名称。所以我需要一种在运行时提供这个的方法。但我无法让它工作。

我正在尝试通过使用文档说明以下内容来做到SPI_execute_with_args一点

SPI_execute_with_args执行可能包含对外部提供的参数的引用的命令。命令文本将参数称为$n,并且调用为每个此类符号指定数据类型和值。read_onlycount具有与中相同的解释 SPI_execute

与此例程相比,此例程的主要优点SPI_execute是可以将数据值插入命令中而无需繁琐的引用/转义,因此 SQL 注入攻击的风险要小得多。

SQL 脚本如下所示(如果我$1手动将 替换为真实的模式名称并将其作为普通脚本运行,则一切正常):

但是现在我想从 C 代码中运行它,并且由于文档缺少关于 SPI 的任何工作示例,我不得不四处搜索以找到可以进一步指导我的任何内容。我在 SO 上找到了这个例子,函数看起来像这样:

这可以正常工作(替换$1为作为参数输入的数字)。

但是一旦我开始修改它以使用我自己的查询,一切都会中断。我什至不能让它只与查询的第一行一起工作。

为了记录,我还尝试运行一个简单的SELECT '$1'查询并将其替换为各种变量。但除了这个例子之外没有别的东西。服务器崩溃,返回无效语法$1或只是返回$1作为答案。


如果我是对的,那么您想要替换位置和内容似乎很重要。并且 SPI 不只是在?$1 $1

在测试各种变量类型时,我尝试了一些不同的 OID:s,例如:ANYOIDCSTRINGOIDCHAROIDREGNAMESPACEOIDTEXTOID。我尝试将变量作为纯 char 数组和指向分配有SPI_palloc()or的文本块的指针发送palloc()。但是没有成功...

我从找到的示例和文档中汇总的示例代码:

运行此代码时,我得到以下结果:


我不确定这是不是最好的方法,但即使不是,也很高兴能更多地了解这个 SPI 函数是如何工作的,因为我需要在项目中进一步使用它。

有没有人对此有任何可行的例子或将我推向正确方向的东西?

0 投票
1 回答
1055 浏览

postgresql - ActiveRecord:添加了“uuid-ossp”扩展,但没有可用的 uuid 函数

使用rails-5.0.7.1(根据bundle show rails

我编写了一个添加"uuid-ossp"扩展的迁移,并且 SQL 被执行,当我\dxpsql控制台中键入时,扩展显示出来。但是,当我键入 时,此扩展提供的功能(例如uuid_generate_v4)不会显示\df,因此任何尝试使用应添加的功能都会失败。

当我从 ActiveRecord 迁移中获取 SQL 并将其psql直接复制粘贴到控制台时,一切都按预期工作 - 添加了扩展,并且功能可用。

这是我的迁移代码:

这是输出:

^ 这一切似乎运行成功,但没有启用任何功能。这意味着未来的 SQL 包含诸如... SET uuid = uuid_generate_v4() ...失败并出现此错误的语句HINT: No function matches the given name and argument types. You might need to add explicit type casts.

有什么作用

直接进入psql并输入:

^ 这将安装扩展并使功能可用。

然而,什么不起作用

好的,所以如果我采用上述 SQL 并以这种方式重写我的迁移:

^ 此迁移将正常运行,但仍无法使功能可用。

所以,同样的复制+粘贴 SQLpsql不能通过 ActiveRecordexecute方法工作,这让我很困惑。我不确定我错过了什么导致失败的部分。

0 投票
0 回答
83 浏览

postgresql-11 - 在 Windows 10 上为 PostgreSQL 11 安装 Pgroonga

PostgreSQL 扩展新手在这里。

所以我试图在 Windows 10 上为 PostgreSQL 11 安装 Pgroonga(已经安装)它告诉我提取下载的 Pgroonga 包的说明。我需要将 PostgreSQL 文件夹指定为提取目标文件夹,如下所示。

如果您安装了安装程序版本 PostgreSQL,

C:\Program Files\PostgreSQL\%POSTGRESQL_VERSION%

是解压目标文件夹。

如果您安装了 zip 版本的 PostgreSQL,

%POSTGRESQL_ZIP_EXTRACTED_FOLDER%\pgsql

是解压目标文件夹。我使用安装程序版本安装了我的 PostgreSQL,但是我无法在我的 PostgreSQL 上找到这个文件夹,因此无法安装扩展。任何帮助将不胜感激。解压出来的pGroonga文件有bin等,include,lib,share文件夹。虽然我安装的 pg11 也有 bin 等包括 init lib 和共享文件夹。在此处提取此文件将更新我认为不好的文件。但是,我已将文件复制到相应的文件夹,但仍然出现错误。

0 投票
1 回答
75 浏览

postgresql - 使用 SPI 的 PostgreSQL 并行查询可能吗?

我正在使用 PostgreSQL 的服务器编程接口(SPI) 来构建我的 postgres 扩展并执行我的查询。请参阅详细示例,或以下简单代码示例:

我们知道 PostgreSQL 具有并行查询支持功能,其中使用多个处理器并行执行查询。由于 SPI 接口隐藏了相当多的复杂性(通信/锁/光标/等),我想知道以这种方式执行查询是否会以某种方式限制这种并行查询功能?显然,如果它确实构成了限制,那么它可能不值得使用。