PostgreSQL命名约定


Answers:


249

关于表名,大小写等,普遍的约定是:

  • SQL关键字: UPPER CASE
  • 名称(标识符): lower_case_with_underscores

例如

UPDATE my_table SET name = 5;

这不是一成不变的,但IMO强烈建议使用小写的标识符。Postgresql在不加引号的情况下将标识符区分大小写(实际上将其内部折叠为小写),在加引号时则区分大小写;许多人不知道这种特质。始终使用小写字母是安全的。无论如何,只要您保持一致,就可以使用camelCasePascalCase(或UPPER_CASE):始终或不加引号标识符(包括模式创建!)。

我不知道更多的约定或样式指南。代理键通常是由序列(通常是serial宏)组成的,如果您手动创建这些序列,则坚持使用这些序列的命名会很方便(tablename_colname_seq

另请参见此处此处和(对于常规SQL)此处的一些讨论,所有这些都带有几个相关链接。

注意:Postgresql 10引入了identity 列,作为serial的SQL兼容替代品。


3
FWIW,唯一的特质是Pg折叠为小写,而SQL标准说它应该折叠为大写。不能折叠的DBMS是怪异的非标准DBMS。
Craig Ringer 2014年

6
作为Postgres的新用户,这非常令人沮丧。始终必须在键入引号之间进行选择,或者必须使用丑陋的命名约定进行选择。糟透了。
d512

1
@ user1334007约定并不难看-请阅读上面Craig的评论。而且,如果您在创建表时未引用(即如果您保持一致),则无需引用。
leonbloy

4
@leonbloy,如果在创建表时未引用,则Postgres将小写您的表名和字段名。您可以在编写查询时使用驼峰式大小写,但结果将显示为所有小写字母,当字段包含多个单词(lastupdateddate)时,很难阅读。如果希望列名在查询结果中可读,则必须引用所有内容或使用蛇形大小写,这在IMO上很丑陋。如果Postgres不理会您的名字并且不要求您提供引号会更好。
d512

11
我讨厌大写的关键字,只是讨厌,约定或否。关键字没有大小写相关性。我更喜欢所有小写字母。是的,我知道这只是一个偏爱,但这仅是评论。;-)
Craig

28

确实没有正式的手册,因为没有单一的样式或标准。

只要您了解标识符命名的规则就可以使用任何您喜欢的名称。

在实践中,我发现它更易于使用,lower_case_underscore_separated_identifiers因为它不需要"Double Quote"到处都保留大小写,空格等。

如果要命名表和函数 "@MyAṕṕ! ""betty"" Shard$42",则可以随意执行此操作,尽管在任何地方键入都很麻烦。

要了解的主要内容是:

  • 除非双引号,标识符是区分折叠为小写,所以MyTableMYTABLE并且mytable都是同样的事情,但"MYTABLE""MyTable"不同;

  • 除非双引号:

    SQL标识符和关键字必须以字母(az,但带有变音符号和非拉丁字母的字母)或下划线(_)开头。标识符或关键字中的后续字符可以是字母,下划线,数字(0-9)或美元符号($)。

  • 如果希望将关键字用作标识符,则必须双引号。

实际上,我强烈建议您不要关键字用作标识符。至少避免保留字。仅仅因为您可以命名表"with"并不意味着您应该这样做。


1
感谢您链接到有关标识符命名规则的文档。我很难找到那个特定主题。
罗勒·布尔克

1
“我发现使用起来更容易lower_case_underscore_separated_identifiers” ...最近,我听说这被描述为“蛇皮”
bvj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.