Postgresql PSQL在推断模式,但如何推断?
我们正在将我们的软件从PostgreSQL 9.2升级到9.6,我们遇到了一个奇怪的问题 我们的安装运行一个SQL脚本来创建数据库。这是使用psql-f完成的。这在9.2下运行良好,但在9.6中不创建对象似乎有问题。我一直在研究这个问题,在SQL脚本中发现了一些奇怪的东西。大多数表是使用如下语句创建的:Postgresql PSQL在推断模式,但如何推断?,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我们正在将我们的软件从PostgreSQL 9.2升级到9.6,我们遇到了一个奇怪的问题 我们的安装运行一个SQL脚本来创建数据库。这是使用psql-f完成的。这在9.2下运行良好,但在9.6中不创建对象似乎有问题。我一直在研究这个问题,在SQL脚本中发现了一些奇怪的东西。大多数表是使用如下语句创建的: -- -- Name: crawler_run; Type: TABLE; Schema: analytics; Owner: postgres; Tablespace: -- CREATE
--
-- 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
语句中没有架构。但是表是在正确的模式中创建的,随后的altertable
语句没有失败
我最好的猜测是前面的评论与此有关,但我还没有找到任何文档来支持这一点
那么这是如何工作的呢?表是在用户/角色的第一个模式中创建的,该模式可以是永久设置的,也可以是仅为当前会话设置的 请看下面这样的语句:
SET search_path = analytics
在您的案例中,它是
分析
,现在可能又回到默认的公共
表格是在用户/角色的第一个架构中创建的,该架构可以是永久设置的,也可以是仅为当前会话设置的
请看下面这样的语句:
SET search_path = analytics
在您的情况下,它是
analytics
,现在可能又回到了默认的public
,我不知道它为什么在以前对您有效,但是当您创建表时,您应该首先创建它以更正模式,或者在更改特定模式中的所有者权限之前,需要首先更改模式。简而言之:也许9.2更宽容,它在9.6中得到了修复,但是我建议您更改构建脚本,正确地执行它:)在脚本开头寻找一条语句。@pozs您得到了它。声明的内容远高于此,但这似乎是个骗局。谢谢我不知道为什么它在之前对您有效,但是当您创建表时,您应该首先创建它以更正模式,或者在更改特定模式中的所有者权限之前,需要首先更改模式。简而言之:也许9.2更宽容,它在9.6中得到了修复,但是我建议您更改构建脚本,正确地执行它:)在脚本开头寻找一条语句。@pozs您得到了它。声明的内容远高于此,但这似乎是个骗局。谢谢一个指向文档的链接和一个关于“搜索路径”含义的快速解释将把这个问题从一个好的答案变成一个好的答案。一个指向文档的链接和一个关于“搜索路径”含义的快速解释将把这个问题从一个好的答案变成一个好的答案。