问题标签 [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.
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 函数吗?
postgresql - debian 上的 postgres 扩展 pg_background
我有几台服务器需要安装扩展名为 pg_background 的 postgres 9.6。但是这个扩展不在“postgresql-contrib”包中。扩展源和说明在这里: https ://github.com/vibhorkum/pg_background
关键是根据说明,有必要在每台服务器上下载和编译源代码。
有没有办法在获得某种存档后“编译”源代码,然后将其复制并安装到所有服务器?我的意思是,我不想下载源代码并在每台服务器上编译它。
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 上?
c - PostgreSQL 的 C 语言函数的字符串操作
我想创建一个 postgresql c-Language 函数,其参数和返回值是 varchar 并且在处理过程中使用 Char []。
但是,它没有按预期工作。
我做了一个这样的c程序。
并且,创建了这样一个脚本。
执行结果是这样的。
执行环境:
- Windows 服务器 2012 R2 x64
- PostgreSQL 9.5.9,由 Visual C++ build 1800 编译,64 位
我是第一次使用 C 语言,所以很高兴提供示例代码。
对不起,我的英语不好。
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
而不是发明/创建我自己的版本,因为我不想继承维护的麻烦。
sql - 如何检测视图是否由扩展创建?
在 PostgreSQL 中,如何知道特定视图是否由扩展创建?
必须执行什么 SQL 查询才能找出答案?没有手动解决方案。
c - 来自 PostgreSQL 中 C 扩展的“CREATE SCHEMA foo ...”查询(使用 SPI_execute_with_args)
我正在尝试使用服务器编程接口 (SPI) 从为 PostgreSQL 构建的 C 扩展执行 SQL 查询。查询应该创建一个包含大量表的新模式。(基本上它应该为用户设置一个工作区。)但是由于用户应该能够创建多个工作区,所以在编写脚本时我不知道架构名称。所以我需要一种在运行时提供这个的方法。但我无法让它工作。
我正在尝试通过使用文档说明以下内容来做到SPI_execute_with_args
这一点:
SPI_execute_with_args
执行可能包含对外部提供的参数的引用的命令。命令文本将参数称为$n
,并且调用为每个此类符号指定数据类型和值。read_only
并count
具有与中相同的解释SPI_execute
。与此例程相比,此例程的主要优点
SPI_execute
是可以将数据值插入命令中而无需繁琐的引用/转义,因此 SQL 注入攻击的风险要小得多。
SQL 脚本如下所示(如果我$1
手动将 替换为真实的模式名称并将其作为普通脚本运行,则一切正常):
但是现在我想从 C 代码中运行它,并且由于文档缺少关于 SPI 的任何工作示例,我不得不四处搜索以找到可以进一步指导我的任何内容。我在 SO 上找到了这个例子,函数看起来像这样:
这可以正常工作(替换$1
为作为参数输入的数字)。
但是一旦我开始修改它以使用我自己的查询,一切都会中断。我什至不能让它只与查询的第一行一起工作。
为了记录,我还尝试运行一个简单的SELECT '$1'
查询并将其替换为各种变量。但除了这个例子之外没有别的东西。服务器崩溃,返回无效语法$1
或只是返回$1
作为答案。
如果我是对的,那么您想要替换的位置和内容似乎很重要。并且 SPI 不只是在?$1
$1
在测试各种变量类型时,我尝试了一些不同的 OID:s,例如:ANYOID
、CSTRINGOID
、CHAROID
、REGNAMESPACEOID
等TEXTOID
。我尝试将变量作为纯 char 数组和指向分配有SPI_palloc()
or的文本块的指针发送palloc()
。但是没有成功...
我从找到的示例和文档中汇总的示例代码:
运行此代码时,我得到以下结果:
我不确定这是不是最好的方法,但即使不是,也很高兴能更多地了解这个 SPI 函数是如何工作的,因为我需要在项目中进一步使用它。
有没有人对此有任何可行的例子或将我推向正确方向的东西?
postgresql - ActiveRecord:添加了“uuid-ossp”扩展,但没有可用的 uuid 函数
使用rails-5.0.7.1
(根据bundle show rails
)
我编写了一个添加"uuid-ossp"
扩展的迁移,并且 SQL 被执行,当我\dx
在psql
控制台中键入时,扩展显示出来。但是,当我键入 时,此扩展提供的功能(例如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
方法工作,这让我很困惑。我不确定我错过了什么导致失败的部分。
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 和共享文件夹。在此处提取此文件将更新我认为不好的文件。但是,我已将文件复制到相应的文件夹,但仍然出现错误。