PostgreSQL 如何获取不区分大小写的模式名称

BOU*_*med 1 schema postgresql

我创建了一个带有大写字母的架构,如下所示:

CREATE SCHEMA "requeteSQL"  AUTHORIZATION ......;
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试GRANT一些特权时,例如:

GRANT SELECT ON ALL TABLES IN SCHEMA requetesql  TO ....;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR:  schema "requetesql" does not exist
Run Code Online (Sandbox Code Playgroud)

McN*_*ets 5

双引号强制名称区分大小写。

\n

来自此博客:Don\xe2\x80\x99t 在 PostgreSQL 中使用双引号

\n
\n

现在,有一种方法可以解决这个问题,即使用双引号。PostgreSQL 中的单引号用于创建文本字符串,而双引号用于命名标识符而不更改其大小写。

\n

让我再说一遍,因为很多人都搞错了:PostgreSQL 中的单引号和双引号有完全不同的作用,并且返回完全不同的数据类型。单引号返回文本字符串。双引号返回(如果您确实可以将它们视为 \xe2\x80\x9creturning\xe2\x80\x9d 任何内容)标识符,但保留大小写。

\n
\n

在你的问题中你应该改变:

\n
GRANT SELECT ON ALL TABLES IN SCHEMA requetesql  TO ....;\n
Run Code Online (Sandbox Code Playgroud)\n

经过

\n
GRANT SELECT ON ALL TABLES IN SCHEMA "requeteSQL"  TO ....;\n
Run Code Online (Sandbox Code Playgroud)\n

  • 或者甚至更好的解决方案:**仅对所有 Postgres 标识符使用小写字母**。不要在标识符上使用双引号。这也使您的 SQL 更容易移植到其他数据库。 (2认同)