【发布时间】:2022-01-27 14:57:17
【问题描述】:
我尝试使用如下语法创建名为 15909434_user 的表:
CREATE TABLE 15909434_user ( ... )
当然会产生错误。然后,在我尝试与 google 进行一些研究后,我发现了一篇很好的文章 here 描述:
当你在 PostgreSQL 中创建一个对象时,你给这个对象一个名字。每个表都有一个名称,每个列都有一个名称,等等。 PostgreSQL 使用单一数据类型来定义所有对象名称:
name类型。
name类型的值是 63 个或更少字符的字符串。名称必须以字母或下划线开头;字符串的其余部分可以包含字母、数字和下划线。...
如果您发现需要创建不符合这些规则的对象,可以将名称用双引号括起来。将名称用引号括起来会创建一个带引号的标识符。例如,您可以创建一个名称为“
3.14159”的表——双引号是必需的,但实际上不是名称的一部分(也就是说,它们没有被存储并且不计入 63 个字符的限制)。 ...
好的,现在我知道如何使用这种语法来解决这个问题(在表名上加上双引号):
CREATE TABLE "15909434_user" ( ... )
您可以创建表名或列名,例如"15909434_user" 和user_15909434,但不能创建以数字开头且不使用双引号的表名或列名。
那么,我很好奇这背后的原因(除了它是一个约定)。为什么应用这个约定?是为了避免语法限制还是其他原因?
提前感谢您的关注!
【问题讨论】:
标签: sql postgresql naming-conventions