日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写

發(fā)布時(shí)間:2025/7/14 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

項(xiàng)目從Oracle移植到PostgreSQL(9.4版)后,這幾天又出現(xiàn)故障,經(jīng)跟蹤定位,確定原因是調(diào)用PgDatabaseMetaData.getPrimaryKeys()接口返回了空集。

眾所周知,大多數(shù)情況下SQL語句對(duì)表名、列名都是大小寫不敏感(據(jù)本人經(jīng)驗(yàn),linux平臺(tái)的MySql默認(rèn)對(duì)表名區(qū)分大小寫,可算是個(gè)例外)。對(duì)應(yīng)的,各數(shù)據(jù)庫JDBC也理應(yīng)對(duì)大小寫不敏感,但實(shí)際情況是:PostgreSQL的JDBC的部分接口只認(rèn)全部小寫的表名、列名,而對(duì)全大寫、大小寫混合的情況都不支持。

PostgreSQL在其數(shù)據(jù)字典里存放的都是全小寫的表名、列名,,但JDBC的接口在處理時(shí)卻沒有進(jìn)行大小寫轉(zhuǎn)換。以下是參考PostgreSQL-JDBC的源碼而改造得來的查詢某表主鍵的SQL代碼:

select pg_attribute.attname as colname,pg_type.typname as typename,pg_constraint.conname as pk_name from pg_constraint inner join pg_class on pg_constraint.conrelid = pg_class.oid inner join pg_attribute on pg_attribute.attrelid = pg_class.oid and pg_attribute.attnum = pg_constraint.conkey[1] inner join pg_type on pg_type.oid = pg_attribute.atttypid where pg_class.relname = 'table_name' and pg_constraint.contype='p';

當(dāng)table_name為全小寫時(shí),可以獲得正確結(jié)果,其它情況結(jié)果均為空。

也許PostgreSQL方面因某種原因而刻意為之,但本人傾向于認(rèn)為這是bug。畢竟,其它主流數(shù)據(jù)庫的JDBC都能正確應(yīng)對(duì)這種情況。

經(jīng)簡(jiǎn)單測(cè)試,本項(xiàng)目涉及的接口包括:

//獲取表主鍵 public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException;//獲取表外鍵 public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException;//獲取列名 public String getColumnName(int column);

受影響的接口應(yīng)該還有不少,很可能也不止PgDatabaseMetaData一個(gè)類;另外猜測(cè),模式名、用戶名、數(shù)據(jù)庫名等可能也在影響之列。

但因項(xiàng)目時(shí)間緊迫沒有核實(shí),大家在使用時(shí)留心這個(gè)問題,在應(yīng)用程序中加入大小寫轉(zhuǎn)換的代碼。

?

PS:最近在使用ODBC時(shí)發(fā)現(xiàn)存在同樣情況,組裝SQL時(shí)如果表名、列名、模式名等不是全小寫,會(huì)報(bào)Syntax Error,改成全小寫后正常。

轉(zhuǎn)載于:https://www.cnblogs.com/wggj/p/8005110.html

總結(jié)

以上是生活随笔為你收集整理的PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。