我正在测试 creating a simple base36 PostgreSQL extensions 的示例.
但是,我在编写和使用单元测试用例 (REGRESS =
) 时遇到了问题。如果我使用 sudo make installcheck
,将会出现错误提示
... ============== dropping database "contrib_regression" ==============
psql: FATAL: role "root" does not exist ... ...
似乎 PostgreSQL 试图使用当前登录用户来执行测试,在这种情况下不存在。如果我省略 sudo
而只是执行 make installcheck
,它将生成一个不同的错误,提示 permission denied
for something
CREATE DATABASE ERROR: permission denied to set parameter "lc_messages" command failed: "/usr/lib/postgresql/9.5/bin/psql" -X -c "ALTER DATABASE \"contrib_regression\" SET lc_messages TO 'C';ALTER DATABASE \"contrib_regression\" SET lc_monetary TO 'C';ALTER DATABASE \"contrib_regression\" SET lc_numeric TO 'C';ALTER DATABASE \"contrib_regression\" SET lc_time TO 'C';ALTER DATABASE \"contrib_regression\" SET timezone_abbreviations TO 'Default';" "contrib_regression" /usr/lib/postgresql/9.5/lib/pgxs/src/makefiles/pgxs.mk:272: recipe for target 'installcheck' failed make: *** [installcheck] Error 2
我的问题是:
我可以在 Makefile
中为 PostgreSQL 扩展指定不同的用户(例如 super 用户)吗?
或者,我能否解决问题以便非 super 用户可以执行installcheck
?
注意:Makefile
是:
EXTENSION = base36 # the extensions name
DATA = base36--0.0.1.sql # script files to install
REGRESS = base36_test # our test script file (without extension)
# postgres build stuff
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
最佳答案
您可以设置环境变量PGUSER
,例如
PGUSER=foo make installcheck
以 root 身份(通过 sudo)运行 make installcheck
很可能是错误的做法。
关于postgresql - 如何在 postgres 扩展的 Makefile 中为 installcheck 设置用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37661605/