NAMEDATALEN
是一个常量,它定义了数据库标识符(例如数据库、表、列等的名称)的最大长度(以单字节字符表示)。此值包含一个尾随零字节,这意味着实际最大长度为 NAMEDATALEN
- 1
。
NAMEDATALEN
在编译时配置。如果更改,则需要 initdb
来初始化具有更改值的新数据库实例。
标准值为:64
。
确定 NAMEDATALEN 的值
实例使用的 NAMEDATALEN
值存储在 pg_control
文件中,并由 pg_controldata
在“标识符的最大长度
”字段中报告。
在 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 线程:重新审视 NAMEDATALEN 包含了一些关于为什么 NAMEDATALEN
在未来不太可能扩展以及讨论使其成为可配置参数的(不)可行性的见解。2021 年的一个线程(“由于非拉丁语言而导致 NAMEDATALEN 增加”)讨论了使 NAMEDATALEN
更灵活的可能方法。
更改历史记录
- PostgreSQL 7.3
- 值更改为
64
(提交 46bb23ac)。
- 值更改为
- PostgreSQL 6.1
- 值从
16
更改为32
(提交 7492fb16)
- 值从
参考文献
- PostgreSQL 文档: 标识符和关键字