标签: postgresql-extensions

203
推荐指数
6
解决办法
10万
查看次数

在Postgres数据库中的多个模式上安装hstore的最佳方法?

我正在开发一个需要hstore在多个模式上使用的项目.hstore安装扩展程序的"公共"模式无处不在,因为我的作用域不在"公共"中查找.在一些试用版中,我在名为"hstore"的模式上创建了扩展,并在所使用的每个可用范围(搜索路径)上使用了模式.

基于此,我有一些问题:

  • 是否可以为扩展创建架构?或者是它更好地在每一个方案中创建的扩展(如,customer_1,customer_2,等...)?

  • 在单独的模式中创建扩展是否会影响数据的存储位置?我正在使用多个模式来使备份/恢复更容易,并且实际上不希望pg将我的所有hstore数据存储pg_large_objects在单个模式的隐藏表(例如blob)中.

postgresql hstore postgresql-extensions

10
推荐指数
1
解决办法
3502
查看次数

用户不能使用扩展名"uuid-ossp"

我正在开发一个应用程序,我决定使用UUID作为主键和外键.为此,我使用了扩展名"uuid-ossp",它在开发环境中运行良好.

现在,我正在安装测试环境.数据库设置由客户制作的脚本强加.结构是标准的:admin用户,应用程序用户,应用程序命名空间等.

我可以使用admin帐户创建扩展程序:

$ psql mydb -U [admin_user]

mydb=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION

mydb=# select uuid_generate_v4();
        uuid_generate_v4
--------------------------------------
 23e45b57-a658-41a5-8661-0cc06568eff8
Run Code Online (Sandbox Code Playgroud)

但是当我与数据库应用程序用户连接时,我无法生成一个uuid:

$ psql mydb -U [app_user]

SELECT uuid_generate_v4();

mydb=> select uuid_generate_v4();
ERROR:  function uuid_generate_v4() does not exist
Run Code Online (Sandbox Code Playgroud)

admin_user和app_user都在同一个数据库中.app_user可以"查看"扩展程序但不能使用它:

bdd3001=> select * from pg_catalog.pg_extension;
  extname  | [...]
-----------+-
 plpgsql   | [...]
 uuid-ossp | [...]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

postgresql search-path postgresql-extensions

8
推荐指数
1
解决办法
4987
查看次数

如何在 postgres 扩展的 Makefile 中设置安装检查的用户?

我正在测试一个用于创建简单的 base36 PostgreSQL 扩展的示例。

然而,我在编写和使用单元测试用例时遇到了问题(REGRESS =)。如果我使用sudo make installcheck,会出现错误

... ============== 删除数据库“contrib_regression” ==============

psql: FATAL: 角色“root”不存在……

看来 PostgreSQL 正在尝试使用当前登录用户来执行测试,在本例中该用户不存在。如果我省略了sudo并且只是这样做make installcheck,它会生成一个不同的错误说permission denied某事

创建数据库错误:权限被拒绝设置参数“lc_messages”命令失败:“/usr/lib/postgresql/9.5/bin/psql”-X -c“ALTER DATABASE \”contrib_regression \“将lc_messages设置为'C';ALTER DATABASE \"contrib_regression\" 将 lc_monetary 设置为 'C';更改数据库 \"contrib_regression\" 将 lc_numeric 设置为 'C';更改数据库 \"contrib_regression\" 将 lc_time 设置为 'C';更改数据库 \"contrib_regression\" 将 timezone_abbreviations TO '默认';” “contrib_regression”/usr/lib/postgresql/9.5/lib/pgxs/src/makefiles/pgxs.mk:272:目标“installcheck”的配方失败:*** [installcheck]错误2

我的问题是:

Makefile我可以在PostgreSQL 扩展中指定不同的用户(例如超级用户)吗?

或者,我可以解决问题以便非超级用户可以执行该操作吗installcheck

注意:Makefile是:

EXTENSION = base36        # the extensions name
DATA = base36--0.0.1.sql  # …
Run Code Online (Sandbox Code Playgroud)

postgresql makefile regression-testing postgresql-extensions

6
推荐指数
1
解决办法
1598
查看次数

如何在关闭后启动 pg_cron 扩展

必须终止 pg_cron 运行的进程。然而,在执行该操作后 pg_cron 扩展停止了。以下是来自服务器的日志:

2021-04-29 12:55:40.712 UTC [535529] LOG:  pg_cron scheduler shutting down
Run Code Online (Sandbox Code Playgroud)

现在,没有作业正在运行。如何在不重新启动 PostgreSQL 服务器的情况下重新启动扩展。

database unix postgresql postgresql-extensions postgresql-12

5
推荐指数
0
解决办法
638
查看次数

PostgreSQL的C语言函数进行字符串操作

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

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

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

#include <postgres.h>
#include <port.h>
#include <fmgr.h>
#include <stdlib.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

// Required for windows.
extern PGDLLEXPORT Datum VARCHAR_CHAR_ARRAY_VARCHAR(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(VARCHAR_CHAR_ARRAY_VARCHAR);

Datum VARCHAR_CHAR_ARRAY_VARCHAR(PG_FUNCTION_ARGS) {
    // Get arg.
    VarChar  *arg1 = (VarChar *)PG_GETARG_VARCHAR_P(0);

    // VarChar to Char[].
    char *c = (char *)VARDATA(arg1);

    elog(NOTICE, "VarChar to Char[]."); 
    elog(NOTICE, c);//Log1

    // Do something.(e.g. replace)
    // Since it uses another system, it must be Char [].

    //Char[] to VarChar.
    VarChar *rtn = (VarChar *)VARDATA(c);
    elog(NOTICE, …
Run Code Online (Sandbox Code Playgroud)

c postgresql postgresql-extensions

1
推荐指数
1
解决办法
822
查看次数