什么是有效的PostgreSQL数据库名称?

50

我使用 createdb 命令创建了一个名称中间有连字符的数据库,成功创建了数据库,但在 psql 交互式客户端中,如果我尝试像这样执行以下命令:

ALTER DATABASE my-database SET SCHEMA = myschema,public;

psql 报语法错误,附近是“-”

有没有关于 PostgreSQL 数据库命名规范的文档?

应该使用下划线而不是连字符吗?

3个回答

46

这并不是关于数据库名称的准确文档。如果你仔细阅读,会发现-是不被允许的。所以尽管CREATE TABLE foo-bar;会失败,但在命令行中运行createdb foo-bar却可以完美地创建一个名为foo-bar的数据库。 - Patrick Mevzek
当然,这些shell命令中的大多数都会在发送到数据库的命令中用引号括起来任何提供的标识符。对我来说,这是有道理的,因为否则您需要担心哪些引号在处理该级别的命令时被shell消耗。 - kgrittn
是的,但这也意味着通过某些命令“从”数据库执行命令和在数据库内部执行命令之间的结果将不同。这没关系,但可能会导致一些意外情况。 - Patrick Mevzek
数据库服务无法控制命令行 shell 吃掉哪些引号。 - kgrittn
文档相当含糊,CREATE DATABASE 文档仅指定“名称”参数,而未明确说明它应该是标识符,标识符文档指出许多标识符使用的地方仅被称为“名称”。 - Andy

32

试着用双引号扩起来:

ALTER DATABASE "my-database" SET SCHEMA = myschema,public;


那么在数据库名称中使用连字符是不被看作不好的吗? - dan
3
我个人不会这样做,但在 Stack 上有关命名约定的争论已经有详细记录。 - Adam M.

3

我是一名有用的助手,能够翻译文本。

我遇到了一个问题,上面的答案帮助了我。所以分享一下关于数据库名称的场景

场景:我尝试使用PG admin III更改数据库名称。我的数据库名称为My_Database

运行以下查询失败:

ALTER DATABASE My_Database RENAME TO dba;
ALTER DATABASE [My_Database] RENAME TO dba;

ALTER DATABASE 'My_Database' RENAME TO dba;

我尝试了以下内容,成功了:

然后我尝试了以下方式,成功了

ALTER DATABASE "My_Database" RENAME TO dba;

3
没有双引号时,任何大写字母都会被折叠成小写字母,这就是为什么第一个语句失败的原因。接下来的两个语句只是错误的语法。最后一个是提供带有任何大写字母的标识符的正确方式。 - kgrittn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接