我正在开发一个需要hstore在多个模式上使用的项目.hstore安装扩展程序的"公共"模式无处不在,因为我的作用域不在"公共"中查找.在一些试用版中,我在名为"hstore"的模式上创建了扩展,并在所使用的每个可用范围(搜索路径)上使用了模式.
基于此,我有一些问题:
是否可以为扩展创建架构?或者是它更好地在每一个方案中创建的扩展(如,customer_1,customer_2,等...)?
在单独的模式中创建扩展是否会影响数据的存储位置?我正在使用多个模式来使备份/恢复更容易,并且实际上不希望pg将我的所有hstore数据存储pg_large_objects在单个模式的隐藏表(例如blob)中.
我正在开发一个应用程序,我决定使用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)
有任何想法吗?
我正在测试一个用于创建简单的 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
必须终止 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
我想创建一个 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)