PSQL 是在推断模式,但是如何推断?
Posted
技术标签:
【中文标题】PSQL 是在推断模式,但是如何推断?【英文标题】:PSQL was inferring schema, but how? 【发布时间】: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 你明白了。该声明远高于此,但这似乎是诀窍。谢谢!
【参考方案1】:
表是在用户/角色search_path
的第一个模式中创建的,该模式可以是永久设置的,也可以仅用于当前会话。
寻找如下语句:
SET search_path = analytics
在您的情况下,它是analytics
,现在它可能恢复为默认的public
。
【讨论】:
文档链接和对“搜索路径”含义的快速解释将把它从一个好的答案变成一个很好的答案。 postgresql.org/docs/current/static/…以上是关于PSQL 是在推断模式,但是如何推断?的主要内容,如果未能解决你的问题,请参考以下文章
如何部署Tensorflow训练模型以推断Windows独立应用程序