我使用PostgreSQL v9.0.1Rails(它是deps)@v2.3.8,由于使用了postgres的全文功能,我有一个表定义为:

CREATE TABLE affiliate_products (
    id integer NOT NULL,
    name character varying(255),
    model character varying(255),
    description text,
    price numeric(9,2),
    created_at timestamp without time zone,
    updated_at timestamp without time zone,
    textsearch_vector tsvector,
);

注意最后一行,这确保了活动记录不能用标准模式转储程序处理它,所以我必须在./config/environment.rb中设置config.active_record.schema_format = :sql;用rake db:test:clone_structure代替rake db:test:clone.

所有这些都不太引人注目,只是不方便——但是rake db:test:clone_structure失败了,出现了错误:

ERROR: must be owner of language plpgsql

因为我的结果./db/development_schema.sql中的第#16行:

CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;

PostgreSQL v9.0+下,超级用户将语言plpsql安装到初始模板中,然后新创建的模式可以使用该模板.

如果不解决这个问题,我就无法在这个项目上运行测试,甚至手动编辑./db/development_schema.sql也是徒劳的,因为每次我运行rake db:test:clone_structure时都会重新生成它(rake db:test:clone会忽略它).

我希望有人能解释一下?

Note:我使用了pg 0.9.0适配器gem和0.7.9.2008.01.28版本的postgres gem,它们都显示出相同的行为.

我的队友们跑了PostgreSQL v8.4米,语言安装是手动的.

推荐答案

解决方案如下:

在我的安装中,有标准模板template0template1——至少据我所知,postgres在创建新数据库时会查找编号最高的templateN,除非指定了模板.

在本例中,由于template0包括plpgsql,所以template1也包括在内……其 idea 是,您将定制template1以满足特定于站点的默认需求,如果您 destruct 了所有内容,您将从template0恢复template1.

由于我的网站特定要求是在我的web应用程序的自动构建过程中安装plpgsql(为了保持8.4的兼容性,我们必须遵守这一步骤),所以解决方案很简单:从template1中删除plpgsql,警告/错误就消失了.

如果特定于站点的默认值会发生变化,我们需要回到默认行为,我们只需删除template1并重新创建它(使用template0)

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

org.postgresql. util.PSQLException:使用docker + docker—compose + kafka + springboot时try 连接失败

如何接受jsonb路径中的任何密钥?

Postgis超过2个表的查询在运行时爆炸

PostgreSQL\d命令:有办法只 Select 一列吗?

将XML解析从T-SQL迁移到Postgres时出现问题

单个WAL文件中的操作会影响哪些表和多少行

使用 OpenCypher 和 Apache AGE 在两个顶点之间创建双向关系

使用 select 在带有特殊字符的字符串中查找数据

PostgreSql maintenance_work_mem 在索引创建期间增加

计算每行的多列中的非 NULL 元素

如何在 postgresql 上使用 sqlalchemy 进行正确的 upsert?

PostgreSQL:please specify covering index name是什么意思

如何为 JavaEE 应用程序中的 PostgreSQL 热备设置配置连接故障转移?

如何将 postgres 数据库转换为 sqlite

如何引用使用 ON CONFLICT 中的函数的唯一索引?

如何在 Postgresql 中正确使用 FETCH FIRST?

实时监控 PostgreSQL 查询的应用程序?

Postgresql 对象 ID 和元组

pgadmin 错误:no password supplied