PostgreSQL开发中的小坑

2020-06-17 00:00:00 参数 标准 类型 标识符 命名

PostgreSQL 是世界上强大的开源关系型数据库,学术气息浓厚,自由度极高。Nothing is perfect, 这里记几个踩过的小坑。(规范使用并不会有这些问题,但是通用工具开发中需要考虑这些情况)

对象命名之坑

PostgreSQL 中非标准命名中允许使用各种符号(包括:% ? = + ' ''等等),但这种自由有点过火,尤其在开发管理工具过程中要兼容各种情况非常困难。

PostgreSQL对象标识符的命名规则
官方文档postgresql.org/docs/12/
不管是按照标准命名还是非标准命名,同一个模式下的对象不能重名;
一、标准命名规则
标准命名规则要求:
1 SQL标识符和关键字必须以字母(a-z, but also letters with diacritical marks and non-Latin letters)和下划线(_)开头;
2 后续字符可以是字母(a-z)、下划线(_)、数字 (0-9) 或美元符号 ($);
3 不能是PostgreSQL关键字(注意:对于不同类型对象,有相同的关键字,也有不同的关键字不同);
注意: 在 SQL 标准中:标识符中不允许使用美元符号,因此使用美元符号可能会使应用程序移植性差;关键字不能以数字或划线开头或结尾;因此,遵循SQL标准的标识符,可以安全地防止与标准的未来扩展发生冲突。
二、非标准命名规则
标准命名规则之外的命名都是非标准命名:
1 可以使用任何字符,包括保留关键字、中文、特殊符号(空格、*等)等;
2 必须用双引号引起来,否则会报语法错误;
注意:非标准命名必须用引号引起,不会产生语法错误。但此类命名不规范、移植性差、使用成本高,因此坚决不要日常使用。

1 在 SQL 语句的条件中:兼容带英文单引号的对象名称

//WHERE条件的SQL语句
SELECT * FROM pg_class WHERE relname = 'identifer';

相关文章