postgresql字段被截断问题

这篇具有很好参考价值的文章主要介绍了postgresql字段被截断问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近遇到一个问题就是字段名过长,会被pg给截断,导致原始字段和下游用的的字段不一样,就会报错。当然,小伙伴可能会说为什么会用那么长的字段名,每个应用程序里面处理不一样,我们数据字段每次被使用就会加一个后缀,用来标识它是在哪一层里面被使用的,随着被使用的越来越多,就会超长。报错类似于下面这样(字段名是为了测试这个名字故意这样取的,实际不会这样用):

test=# ALTER TABLE "test1" 
 RENAME TO "123456789_123456789_123456789_123456789_123456789_123456789_123456789_";
 ERROR: relation "test1" does not exist

 NOTICE: identifier "123456789_123456789_123456789_123456789_123456789_123456789_123456789_" will be truncated to "123456789_123456789_123456789_123456789_123456789_123456789_123"

这只是这个NOTICE,在命令行里面可以报出来,但是如果是在Java程序里面,执行的时候是不会报这个错,只会在最后执行失败的时候抛出字段不存在的异常。

解决方式

1.查找资料后发现,pg的默认长度是NAMEDATALEN - 1 ,就是NAMEDATALEN 默认是64,所以字段最大长度是63。

下面这个来自于官方文档:

The system uses no more than NAMEDATALEN-1 bytes of an identifier; longer names can be written in commands, but they will be truncated. By default, NAMEDATALEN is 64 so the maximum identifier length is 63 bytes. If this limit is problematic, it can be raised by changing the NAMEDATALEN constant in src/include/pg_config_manual.h.

这个文档也说了,如果想修改的话需要修改src/include/pg_config_manual.h的NAMEDATALEN常量,也就是说想把这个长度改长的话,得修改源码在重新编译pg才行。而且这个长度不仅仅是字段名,包括表名也是一样,都不能超过63,创建表超过也会给你截断掉,这个比较坑的就是在应用程序里面不报错,只有当使用到这个表时才发现对不上。

2.如果你不想重新编译pg,那就只能从程序里面去处理最大长度问题,可以在生成字段或者表名里面加一个判断函数,如果超过了63,会被修改为一个比较短的名字,是否需要储存原来超长的字段名也可以根据场景来控制,假设要储存,中间加一张映射表,解决长名字和短名字之间的映射问题。

参考资料:

https://eichisanden.hateblo.jp/entry/2018/10/06/231210

https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

https://www.postgresql.org/docs/9.4/sql-syntax-lexical.html

https://til.hashrocket.com/posts/8f87c65a0a-postgresqls-max-identifier-length-is-63-bytes文章来源地址https://www.toymoban.com/news/detail-646161.html

到了这里,关于postgresql字段被截断问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis plus 查询数据库字段名自动添加下划线问题解决

    实体类和数据库中的字段名是一致的,但报错Unknown column \\\'dept_id\\\' in \\\'field list\\\',这是因为plus中的驼峰命名法,会自动添加下划线。 关闭驼峰式命名转换为下划线 在配置文件中加一个: 重新运行,就可以了! 报错信息如下: java.sql.SQLSyntaxErrorException: Unknown column \\\'dept_id\\\' in \\\'fi

    2024年02月07日
    浏览(47)
  • Java 数据库改了一个字段, 前端传值后端接收为null问题解决

    前端传值后端为null的原因可能有很多种,我遇到一个问题是,数据库修改了一个字段,前端传值了,但是后台一直接收为null值, 原因排查: 1、字段没有匹配上,数据库字段和前端字段传值不一致 2、大小写一定要注意 这个疏忽大意了 以上都改了还是null ~~~~! 3、get set方法

    2024年02月10日
    浏览(85)
  • POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

    开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群(共1170人左右 1 + 2 + 3) 首先道歉,昨天关于P

    2024年02月12日
    浏览(49)
  • 不能坐视了!Oracle数据库varchar2字段扩容,每月总有那么一两次。----- 优秀的程序应总是尽可能地规避问题

    今天,有后端小伙伴提了个sql工单。对我司服务商系统Oracle数据库的一个mer_name字段扩容。 审批前,我查了一下当前这个mer_name字段的长度是 VARCHAR2(64)。 基于对我司客户名称的长度通常不超过64字的了解,我下意识里感到奇怪:莫非存在长度超过64个文字的客户名称?这种情

    2024年02月19日
    浏览(40)
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

    MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不

    2024年02月14日
    浏览(82)
  • 【数据库】什么是 PostgreSQL?开源数据库系统

    PostgreSQL 是一个开源的对象关系数据库系统,本文,我们将讨论 PostgreSQL、它的用途和好处。 PostgreSQL 是由 PostgreSQL Global Development Group 开发的高级 开源关系数据库管理系统(RDBMS) 。它作为 POSTGRES 项目的一部分于 1986 年在加州大学伯克利分校启动,它最初于 1996 年 7 月 8 日发布

    2023年04月08日
    浏览(46)
  • postgresql数据库定时备份到远程数据库

    1.老规矩,服务器目录结构: conf目录无内容 profile: 其中: 最后一行 export PGPASSWORD=‘root’ 是需要备份的数据库的密码,因为直接用 pg_dump 命令备份需要输入密码交互,而我们需要达到自动备份,所以借助这种方式不需要输入密码 docker-compose.yml: 启动容器: 然后再data目录下面

    2024年02月09日
    浏览(46)
  • PostgreSQL Linux操作PostgreSQL数据库

    PostgreSQL教程 菜鸟教程:https://www.runoob.com/postgresql/postgresql-tutorial.html 登录PG数据库:psql -U 用户名(U需要大写) 登录PG数据库(指定主机、端口,并进入指定数据库): psql -U 用户名 -h 127.0.0.1 -p 5432 -d 数据库名 -U 登录的用户名 -h 连接的主机(默认127.0.0.1,可替换成远程主机

    2024年02月11日
    浏览(61)
  • 数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群(共1140人左右 1 + 2 + 3) 尽管NoSQL数据库继续蓬勃发展,但关系型数据库仍

    2024年02月13日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包