導(dǎo)出pgsql的數(shù)據(jù)庫(kù)字典,報(bào)錯(cuò)syntax error at or near “select?“ 錯(cuò)誤碼為42601

今天在導(dǎo)出pgsql數(shù)據(jù)庫(kù)字典時(shí),運(yùn)行sql出現(xiàn)很奇怪的問(wèn)題,報(bào)錯(cuò)內(nèi)容如下:

SQL 錯(cuò)誤 [42601]: ERROR: syntax error at or near "select?"

位置:1


圖1

sql語(yǔ)句如下:

select

a."數(shù)據(jù)庫(kù)名" as 數(shù)據(jù)庫(kù)名,

a."表名" as 表名,

a."表中文描述" as 表中文描述,

b.typname as 表類(lèi)型,

'' as 表創(chuàng)建時(shí)間,

a."字段編號(hào)" as 字段編號(hào),

a."字段名" as 字段名,

a."字段描述" as 字段描述,

a."字段類(lèi)型" as 字段類(lèi)型,

a."數(shù)據(jù)長(zhǎng)度" as 數(shù)據(jù)長(zhǎng)度,

d.adrename as 默認(rèn)值,

a."是否為空字段" as 是否為空字段,

c.indexrelid as 是否索引字段,

a."是否分區(qū)字段" as 是否分區(qū)字段

from (select

pg_namespace.nspname as 數(shù)據(jù)庫(kù)名,

pg_class.relname as 表名,

cast(obj_description(pg_class.relfilenode,'pg_class') as varchar) as 表中文描述,

'' as 表類(lèi)型,

'' as 表創(chuàng)建時(shí)間,

pg_attribute.attnum as 字段編號(hào),

pg_attribute.attname as 字段名,

col_description(pg_attribute.attrelid,pg_attribute.attnum) as 字段描述,

format_type(pg_attribute.atttypid,pg_attribute.atttypmod) as 字段類(lèi)型,

(case when pg_attribute.attlen > 0 then pg_attribute.attlen else pg_attribute.atttypmod - 4 end) as 數(shù)據(jù)長(zhǎng)度,

'' as 默認(rèn)值,

pg_attribute.attnotnull as 是否為空字段,

'' as 是否索引字段,

'0' as 是否分區(qū)字段,

pg_attribute.attrelid as attrelid,

pg_class.reltype as reltype

from pg_attribute ,pg_class,pg_namespace where pg_attribute.attrelid = pg_class.oid and

pg_namespace.oid = pg_class.relnamespace and pg_attribute.attnum > 0 and pg_class.relkind = 'r' and

pg_namespace.nspname = 'public') as a -- 引號(hào)更改成自己的數(shù)據(jù)庫(kù)名稱(chēng)

left join pg_type b on a.reltype = b.oid

left join pg_index c on concat(a.attrelid,a.字段編號(hào)) = concat(c.indrelid,c.indkey)

left join (select adrelid,adnum, pg_get_expr(adbin, adrelid) as adrename from pg_attrdef)

as d on concat(a.attrelid,a.字段編號(hào)) = concat(d.adrelid,d.adnum)

通過(guò)對(duì)報(bào)錯(cuò)的分析得知在select附件的語(yǔ)法出現(xiàn)錯(cuò)誤。

但是仔細(xì)觀察sql,并不存在sql的語(yǔ)法錯(cuò)誤。之后逐行全選時(shí)查看到如下現(xiàn)象:


圖2

? ? ? ? ? ? ?細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),在逗號(hào)后面多出了一個(gè)空格。但是在pgsql中運(yùn)行一般的sql語(yǔ)句:如select a.id,? ? ? a.name from table a即便是逗號(hào)后面有很多個(gè)空格,該sql運(yùn)行也不會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。

解決方法,在將select返回集中的空格都刪除后,該條sql運(yùn)行正常:


圖3

具體導(dǎo)致原因不是很清楚,希望有對(duì)pgsql了解的大神能夠解惑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容