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
。
我们正在将我们的软件从 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
。