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 是在推断模式,但是如何推断?的主要内容,如果未能解决你的问题,请参考以下文章

自定义数据源的自动火花模式推断

spark 如何从 JSON 推断数字类型?

如何使用Keras OCR示例推断新图像?

如何部署Tensorflow训练模型以推断Windows独立应用程序

如何使通用可变参数函数中先前声明的函数的返回类型成功进行上下文推断?

mongo spark 大型集合的推断模式