【发布时间】:2017-06-15 13:23:58
【问题描述】:
我们正在将我们的软件从 PostgreSQL 9.2 升级到 9.6,但遇到了一个奇怪的问题。
我们的安装运行一个 SQL 脚本来创建数据库。这是使用psql -f 完成的。这在 9.2 下运行良好,但似乎在 9.6 中无法创建对象。我一直在研究这个并在 SQL 脚本中发现了一些奇怪的东西。大多数表都是使用如下所示的语句创建的:
--
-- Name: crawler_run; Type: TABLE; Schema: analytics; Owner: postgres; Tablespace:
--
CREATE TABLE IF NOT EXISTS crawler_run (
... columns, etc.
);
--
ALTER TABLE analytics.crawler_run OWNER TO postgres;
请注意,create table 语句中没有架构。但是这些表是在正确的架构中创建的,随后的 alter table 语句没有失败。
我最好的猜测是前面的评论与它有关,但我无法找到任何文档来支持它。
那么这是如何工作的呢?
【问题讨论】:
-
不知道为什么它以前对您有用,但是当您创建表时,您应该首先创建它以更正架构,或者在更改特定架构中的所有者权限之前需要更改架构第一的。很快:也许 9.2 更宽容,并且在 9.6 中得到了修复,但是我建议您更改构建脚本以正确执行此操作 :)
-
在脚本的开头查找
SET search_path ...语句。 -
@pozs 你明白了。该声明远高于此,但这似乎是诀窍。谢谢!