PSQL 正在推断模式,但如何推断?

PSQL was inferring schema, but how?

我们正在将我们的软件从 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 语句没有失败。

我最好的猜测是前面的评论与它有关,但我找不到任何文档来支持它。

那么这是如何工作的?

表是在 user/role search_path 的第一个架构中创建的,它是永久设置的或仅针对当前会话设置的。

寻找如下语句:

SET search_path = analytics

在你的情况下它是 analytics,现在它可能回到默认值 public