具有 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 上,我们 运行 作为用户 runnerpublic 架构的所有者是 postgres.

如果需要更多数据,请告诉我,我会提供。

此致,

您可以使用命令 \dx hstore

检查扩展是否已安装以及安装在何处

因为我们使用的是 Postgres9.3,所以我们必须在创建数据库时安装 hstoremanually, on our CI they use Postgres9.6 which automatically addhstore`。

另外,它把 hstore 放在命名空间 pg_catalog 中,结果证明 hstorepublic.hstore 不可见的主要原因。

所以我必须做的是在 CI 上创建数据库后执行一个步骤,这会删除特定的扩展名并在正确的架构中创建新的扩展名。

总之,这个问题并不难,因为它很棘手而且很奇怪。