【问题标题】:PSQL was inferring schema, but how?PSQL 是在推断模式,但是如何推断?
【发布时间】: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 你明白了。该声明远高于此,但这似乎是诀窍。谢谢!

标签: postgresql postgresql-9.2


【解决方案1】:

表是在用户/角色search_path 的第一个模式中创建的,该模式可以是永久设置的,也可以仅用于当前会话。

寻找如下语句:

SET search_path = analytics

在您的情况下,它是analytics,现在它可能恢复为默认的public

【讨论】:

猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 2018-11-18
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 2021-07-05
  • 2020-12-04
相关资源
最近更新 更多