NAMEDATALEN 是一个常量,它定义了数据库标识符(例如数据库、表、列等的名称)的最大长度(以单字节字符计)。此值包含一个终止零字节,意味着实际最大长度为 NAMEDATALEN - 1。
NAMEDATALEN 是在编译时配置的。如果更改,需要使用 initdb 来初始化一个具有更改值的新数据库实例。
标准值为:64。
确定 NAMEDATALEN 的值
实例使用的 NAMEDATALEN 值存储在 pg_control 文件中,并通过 pg_controldata 在字段 "Maximum length of identifiers" 中报告。
在 PostgreSQL 9.6 及更高版本中,它由函数 pg_control_init() 返回的列 max_identifier_length 报告。
在 PostgreSQL 8.0 及更高版本中,它由预设配置参数 max_identifier_length 报告。请注意,max_identifier_length 报告的值始终是 NAMEDATALEN - 1。
NAMEDATALEN 和 ENUM
除了数据库标识符之外,ENUM 标签的最大长度也限制为 NAMEDATALEN - 1 字节。
源代码
NAMEDATALEN 在 src/include/pg_config_manual.h 中定义如下:
/* * Maximum length for identifiers (e.g. table names, column names, * function names). Names actually are limited to one less byte than this, * because the length must include a trailing zero byte. * * Changing this requires an initdb. */ #define NAMEDATALEN 64
备注
这个 2017 年的 pgsql-hackers 讨论串:Revisiting NAMEDATALEN 包含了一些关于为什么 NAMEDATALEN 不太可能在未来被扩展的见解,并讨论了将其设为可配置参数(的(不可)行性)。一个 2021 年的讨论串("NAMEDATALEN increase because of non-latin languages")讨论了使 NAMEDATALEN 更灵活的可能方法。
变更历史
- PostgreSQL 7.3
- 值更改为
64(提交 46bb23ac)。
- 值更改为
- PostgreSQL 6.1
- 值从
16更改为32(提交 7492fb16)。
- 值从
参考资料
- PostgreSQL 文档: 标识符和关键字
