带有公共前缀问题的PostgreSQL Hstore扩展

时间:2019-01-25 08:19:21

标签: postgresql database-schema

我一直在努力使用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

一切正常。

此外,还必须注意,这仅在以用户runner身份运行的CI上发生,而public模式的所有者是postgres

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

此致

2 个答案:

答案 0 :(得分:1)

您可以使用命令\dx hstore

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

答案 1 :(得分:1)

在使用Postgres9.3时,我们必须在创建Db时安装hstore manually, on our CI they use Postgres9.6 which automatically add hstore`。

此外,它还将hstore放在命名空间pg_catalog中,这是hstore无法看到public.hstore的主要原因。

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

无论如何,问题并没有棘手和奇怪。