Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PSQL在推断模式,但如何推断?_Postgresql_Postgresql 9.2 - Fatal编程技术网

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

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

我们正在将我们的软件从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
语句中没有架构。但是表是在正确的模式中创建的,随后的
altertable
语句没有失败

我最好的猜测是前面的评论与此有关,但我还没有找到任何文档来支持这一点


那么这是如何工作的呢?

表是在用户/角色的第一个模式中创建的,该模式可以是永久设置的,也可以是仅为当前会话设置的

请看下面这样的语句:

SET search_path = analytics

在您的案例中,它是
分析
,现在可能又回到默认的
公共

表格是在用户/角色的第一个架构中创建的,该架构可以是永久设置的,也可以是仅为当前会话设置的

请看下面这样的语句:

SET search_path = analytics

在您的情况下,它是
analytics
,现在可能又回到了默认的
public

,我不知道它为什么在以前对您有效,但是当您创建表时,您应该首先创建它以更正模式,或者在更改特定模式中的所有者权限之前,需要首先更改模式。简而言之:也许9.2更宽容,它在9.6中得到了修复,但是我建议您更改构建脚本,正确地执行它:)在脚本开头寻找一条语句。@pozs您得到了它。声明的内容远高于此,但这似乎是个骗局。谢谢我不知道为什么它在之前对您有效,但是当您创建表时,您应该首先创建它以更正模式,或者在更改特定模式中的所有者权限之前,需要首先更改模式。简而言之:也许9.2更宽容,它在9.6中得到了修复,但是我建议您更改构建脚本,正确地执行它:)在脚本开头寻找一条语句。@pozs您得到了它。声明的内容远高于此,但这似乎是个骗局。谢谢一个指向文档的链接和一个关于“搜索路径”含义的快速解释将把这个问题从一个好的答案变成一个好的答案。一个指向文档的链接和一个关于“搜索路径”含义的快速解释将把这个问题从一个好的答案变成一个好的答案。