得到PostgreSQL 資料庫表欄位的部分資訊(Name,Type,Len,PK,AutoIncrease,AllowNullable)

來源:互聯網
上載者:User
為了找到這些資訊我可以費老勁,發現 PostgreSQL 的一個可能的 Bug,還查看 PostgreSQL 的源碼才猜到怎樣能得到有自動成長屬性的欄位。不過總體上感覺比 MS SQL SERVER 的資料結構合理很多。大家可以去找找怎樣得到主鍵屬性的 MS SQL 陳述式。廢話不多說,我把語句格式化了一下希望有助於閱讀。帖出來算是對自由軟體的微末貢獻巴。語句雖然沒有得到全部的資訊,但比較難得到的都已列出來,其它的順著這個思路應該問題不大。

select tbl.relname as TableName,
col.attname as ColumnName,
pg_type.typname as ColumnType,
(case when col.attlen<0 then col.atttypmod else col.attlen end) as ColumnLen,
(select count(*) from pg_constraint ct where ct.contype=p::char and col.attnum = any (conkey) and ct.conrelid=tbl.oid) as IsPk,
(case when seq.oid is null then 0 else 1 end) as IsAutoIncrease,
(case when col.attnotnull=false then 1 else 0 end) as AllowNullable
from pg_attribute col
inner join pg_class tbl on col.attrelid=tbl.oid and tbl.relkind=r::char
left join pg_depend dp on tbl.oid=dp.refobjid and col.attnum=dp.refobjsubid and deptype=i::char
left join pg_class seq on dp.objid=seq.oid and seq.relkind=S::char
inner join pg_namespace space on tbl.relnamespace=space.oid and space.nspname<>pg_catalog::name and space.nspname<>information_schema::name and space.nspname<>pg_toast::name
left join pg_type on col.atttypid=pg_type.oid 
where col.attnum>0 
order by tbl.relname, col.attnum

Links
PostgreSQL Official Site
PostgreSQL 中文站  在SQL SERVER2000中:

SELECT
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'欄位序號',
a.name N'欄位名',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'標識',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) N'主鍵',
b.name N'類型',
a.length N'佔用位元組數',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'長度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小數位元',
(case when a.isnullable=1 then '√'else '' end) N'允許空',
isnull(e.text,'') N'預設值',
isnull(g.[value],'') AS N'欄位說明'
--into ##tx

FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder

 

在SQL Server2005中要用extended_properties 代替sysproperties。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.