域名与网站区别,广州网站制作(信科网络),一级域名二级域名区别,wordpress无法安装文章目录 问题#xff1a;标识符太长会被截断分析相关源码可以尝试以下案例 问题#xff1a;标识符太长会被截断
在创建表时#xff0c;发现表名太长会自动被截断#xff0c;导致查询表时报错了。
分析
参考#xff1a;https://www.postgresql.org/docs/current/limits… 文章目录 问题标识符太长会被截断分析相关源码可以尝试以下案例 问题标识符太长会被截断
在创建表时发现表名太长会自动被截断导致查询表时报错了。
分析
参考https://www.postgresql.org/docs/current/limits.html
ItemUpper LimitCommentidentifier length63 bytescan be increased by recompiling PostgreSQL
PostgreSQL里面限制标识符库名、表名等长度不能超过63个字节虽然这个参数可以在编译时修改但是一般都不会去修改(63其实已经够用了相当于6个长的单词如果这都说不清楚那么建议用简称comment的模式)。
相关源码
实际上定义的变量NAMEDATALEN为64但是C语言字符串结尾字符 \0 占一个字节所以用的时候使用 NAMEDATALEN-1来进行判断的即63。
源码详见src\interfaces\ecpg\include\sqlda-native.h
在线可参考https://github.com/postgres/postgres/blob/master/src/interfaces/ecpg/include/sqlda-native.h#L8-L16
/** Maximum length for identifiers (e.g. table names, column names,* function names). Names actually are limited to one fewer byte than this,* because the length must include a trailing zero byte.** This should be at least as much as NAMEDATALEN of the database the* applications run against.*/
/** 标识符的最大长度例如表名、列名、函数名。 名称实际上限制为比此少一个字节因为长度必须包括一个尾随的零字节。** 这至少应该与应用程序运行所针对的数据库的 NAMEDATALEN 一样多。*/
#define NAMEDATALEN 64可以尝试以下案例
-- 如果超过6363可以为63会被自动截断会有提示NOTICE但是不会报错
SELECT repeat(d, 64);
create database dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd;
-- NOTICE: identifier dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd will be truncated to ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
SELECT length(datname),* from pg_database;
-- 63 dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddps:注意这里的63是字节如果是中文的话是21个中文但是强烈不推荐使用中文标识符。