NAMEDATALEN

定义数据库标识符最大长度的常量

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 字节。

源代码

NAMEDATALENsrc/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 更灵活的可能方法。

变更历史

分类

DDL, PostgreSQL 内部结构

反馈

提交关于“NAMEDATALEN”的任何评论、建议或更正,请在此处: 此处