具有 public 前缀问题的 PostgreSql hstore 扩展
PostgreSql hstore extension with public prefix issue
我一直在努力处理我的 PostgreSql 和 hstore 扩展,所以在我的 sql 转储文件中 hstore 字段是用这个脚本创建的:
CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public;
CREATE TABLE public.identity_devices (
...
metadata public.hstore
);
所以我收到一个错误
structure.sql:2058: ERROR: type "public.hstore" does not exist
但如果我使用
metadata hstore
一切正常。
此外,必须注意,这仅发生在我们的 CI 上,我们 运行 作为用户 runner
但 public
架构的所有者是 postgres
.
如果需要更多数据,请告诉我,我会提供。
此致,
您可以使用命令 \dx hstore
检查扩展是否已安装以及安装在何处
因为我们使用的是 Postgres9.3,所以我们必须在创建数据库时安装 hstoremanually, on our CI they use Postgres9.6 which automatically add
hstore`。
另外,它把 hstore
放在命名空间 pg_catalog
中,结果证明 hstore
对 public.hstore
不可见的主要原因。
所以我必须做的是在 CI 上创建数据库后执行一个步骤,这会删除特定的扩展名并在正确的架构中创建新的扩展名。
总之,这个问题并不难,因为它很棘手而且很奇怪。
我一直在努力处理我的 PostgreSql 和 hstore 扩展,所以在我的 sql 转储文件中 hstore 字段是用这个脚本创建的:
CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public;
CREATE TABLE public.identity_devices (
...
metadata public.hstore
);
所以我收到一个错误
structure.sql:2058: ERROR: type "public.hstore" does not exist
但如果我使用
metadata hstore
一切正常。
此外,必须注意,这仅发生在我们的 CI 上,我们 运行 作为用户 runner
但 public
架构的所有者是 postgres
.
如果需要更多数据,请告诉我,我会提供。
此致,
您可以使用命令 \dx hstore
因为我们使用的是 Postgres9.3,所以我们必须在创建数据库时安装 hstoremanually, on our CI they use Postgres9.6 which automatically add
hstore`。
另外,它把 hstore
放在命名空间 pg_catalog
中,结果证明 hstore
对 public.hstore
不可见的主要原因。
所以我必须做的是在 CI 上创建数据库后执行一个步骤,这会删除特定的扩展名并在正确的架构中创建新的扩展名。
总之,这个问题并不难,因为它很棘手而且很奇怪。