postgresql字段被截斷問題

前言

最近遇到一個問題就是字段名過長,會被pg給截斷,導致原始字段和下游用的的字段不一樣,就會報錯。當然,小伙伴可能會說為什么會用那么長的字段名,每個應用程序里面處理不一樣,我們數據字段每次被使用就會加一個后綴,用來標識它是在哪一層里面被使用的,隨著被使用的越來越多,就會超長。報錯類似于下面這樣(字段名是為了測試這個名字故意這樣取的,實際不會這樣用):

test=# ALTER TABLE "test1" RENAME TO "123456789_123456789_123456789_123456789_123456789_123456789_123456789_";ERROR: relation "test1" does not existNOTICE: 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

06-加密算法

加密算法 一、前言知識1、加密解密2、MD5(最常見)3、SHA4、進制5、時間戳6、URL編碼7、base64編碼8、unescape編碼9、AES加密10、DES(類似于base64) 二、常見加密形式算法解析三、演示案例1、某 CTF 比賽題目解析2、某 CMS 密碼加…

爆肝整理,Python自動化測試-Pytest參數化實戰封裝,一篇打通...

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 參數化&#xff1…

uniapp案例30余種實戰項目

uniapp案例30余種實戰項目 mpvue框架仿滴滴出行didi-masteruni-app自定義導航欄title-customvue-mpvue-ChatRobot聊天機器人vue-mpvue-ChatRobot-master一款播課類小程序, 基于 mpvue 構建mp-podcast-mpvue-mastermpVue高仿美團小程序教程mpvue-meituan-masteruni-app 二維碼生…

【RS485 - 為什么要接收端計算時間偏移量】

我以前一直以為計算機等的信號傳輸速率都是非常快的,不用計算時間差。 然而在實際應用中發現信息是需要傳輸時間的,而這些時間somehow是可以計算的。 前提信息 波特率 9600; 控制器和執行器通過RS485通信; 控制器發出同步的命令…

spring框架,以及和spring框架相關的Java面試題和spring ioc的注入方式

目錄 一.spring來源,以及介紹 1.spring誕生的背景 2.spring框架 介紹 3.spring框架在使用中的優點以及不足 3.1優點 3.2不足 3.3總結 4.為什么要使用spring 二.將spring框架部署在IDEA中 1.替換pom.xml 2.構建spring所需要的xml文件 三.spring的三種注入…

網絡通信原理IP頭部格式(第四十二課)

字段作用解析:1)版本: 指的IP地址的版本 (IPv4 或 IPV6)2)首部長度: 次數據包的首部長度一共是多少,沒有加可選項3)優先級與服務類型:表示****數據包是否需要優選傳遞4)總長度: 表示的是整個數據包的大小,也就****是首部+數據5)標識符、標志、段偏移量:的作用將拆開的…

無涯教程-Perl - syswrite函數

描述 此函數嘗試將SCALAR中的LENGTH個字節寫入與FILEHANDLE相關的文件。如果指定了OFFSET,則從提供的SCALAR中的OFFSET字節中讀取信息。該函數使用C /操作系統的write()函數,該函數繞過普通緩沖。 語法 以下是此函數的簡單語法- syswrite FILEHANDLE, SCALAR, LENGTH, OFFS…

draw.io導出矢量圖到word報錯text is not svg - cannot display

先參考https://blog.csdn.net/a625750076/article/details/126384831 如果不行,可能是轉存的問題 解決方法:直接在draw.io上操作 第一步 第二步 然后再word中粘貼,依舊是矢量圖哦!

Ajax入門+aixos+HTTP協議

一.Ajax入門 概念:AJAX是瀏覽器與服務器進行數據通信的技術 axios使用: 引入axios.js使用axios函數:傳入配置對象,再用.then回調函數接受結果,并做后續處理 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>01.axios使用…

面試題. 零矩陣

編寫一種算法&#xff0c;若M N矩陣中某個元素為0&#xff0c;則將其所在的行與列清零。 示例 1&#xff1a; 輸入&#xff1a; [[1,1,1],[1,0,1],[1,1,1] ] 輸出&#xff1a; [[1,0,1],[0,0,0],[1,0,1] ] 示例 2&#xff1a; 輸入&#xff1a; [[0,1,2,0],[3,4,5,2],[1,3…

獲取excel中的圖片(包含wps中嵌入單元格圖片)

項目中有excel導入功能,并且需要導入excel中的圖片;模板如圖: 已知office中插入的圖片為浮動形式;如圖: wps中可以插入浮動圖片,也可以插入嵌入單元格圖片;如圖: 并且在wps嵌入單元格形式的圖片可以看到使用的是公式;如圖: 問題來了,如何獲取圖片 并且將圖片與單元格進行對應 …

Cat(3):客戶端集成—簡單案例

接下來編寫一個簡單的springboot與Cat整合的案例 1 新建springboot項目 首先創建一個Spring Boot的初始化工程。只需要勾選web依賴即可。 2 添加 Maven 添加依賴 <dependency><groupId>com.dianping.cat</groupId><artifactId>cat-client</artifa…

UE4/5Niagara粒子特效學習(使用UE5.1,適合新手)

目錄 創建空模板 創建粒子 粒子的基礎屬性 粒子的生命周期 顏色 大小設置 生成的位置 Skeletal Mesh Location的效果&#xff1a; Shape Location 添加速度 添加Noise力場 在生成中添加&#xff1a; 效果&#xff1a; ?編輯 在更新中添加&#xff1a; 效果&…

機器學習線性代數基礎

本文是斯坦福大學CS 229機器學習課程的基礎材料&#xff0c;原始文件下載 原文作者&#xff1a;Zico Kolter&#xff0c;修改&#xff1a;Chuong Do&#xff0c; Tengyu Ma 翻譯&#xff1a;黃海廣 備注&#xff1a;請關注github的更新&#xff0c;線性代數和概率論已經更新完畢…

簡述 TCP 和 UDP 的區別以及優缺點和使用場景?

一、TCP與UDP區別總結&#xff1a; 1、TCP面向連接&#xff08;如打電話要先撥號建立連接&#xff09;;UDP是無連接的&#xff0c;即發送數據之前不需要建立連接 2、TCP提供可靠的服務。也就是說&#xff0c;通過TCP連接傳送的數據&#xff0c;無差錯&#xff0c;不丟失&…

SQL Injection

SQL Injection 就是通過把惡意的sql命令插入web表單遞交給服務器&#xff0c;或者輸入域名或頁面請求的查詢字符串遞交到服務器&#xff0c;達到欺騙服務器&#xff0c;讓服務器執行這些惡意的sql命令&#xff0c;從而讓攻擊者&#xff0c;可以繞過一些機制&#xff0c;達到直…

Vue使用element-ui

main.js配置 //引入Vue import Vue from vue //引入App import App from ./App.vue//完整引入 //引入ElementUI組件庫 // import ElementUI from element-ui; //引入ElementUI全部樣式 // import element-ui/lib/theme-chalk/index.css;//按需引入 import { Button,Row,DatePi…

記一次前端直接上傳圖片到oss報錯

前端直接上傳圖片到阿里云oss,相關過程官網和網上資料已經很詳細&#xff0c;不做贅述。 但這個過程比較復雜&#xff0c;前后端對接過程中很容易出現報錯&#xff0c;這里遇到了以下報錯&#xff0c;不容易排查。 請求顯示net::ERR_NAME_NOT_RESOLVED錯誤&#xff0c;catch輸…

如何在windows電腦安裝多個tomcat服務器和亂碼問題

前提條件安裝jdk 以17版本為例&#xff0c;將jdk8卸載干凈 1.首先進入tomcat官網下載 tomcat網址 這里下載tomcat10為例子 1.1 這里選擇方式一 下載解壓版 2.解壓后拷貝三份 分別命名為 8081、 8082、 8083 3.分別對每個tomcat執行以下操作 3.1 找到tomcat所在webapps文…

Flask框架-配置日志(1):flask使用日志

一、項目結構 study_flask --| apps/ --| __init__.py --| base/ --| logger.py --| __init__.py --| app.py 二、配置日志功能 1、base/logger.py import os import logging from datetime import datetime,date,timedelta from logging.handlers import RotatingFileHandl…