oracle describe table,PostgreSQL"DESCRIBE TABLE"

小智..

5

为了改进另一个答案的SQL查询(很棒!),这是一个经过修改的查询。它还包括约束名称,继承信息以及分解为组成部分的数据类型(类型,长度,精度,小数位数)。它还过滤掉已删除的列(数据库中仍然存在)。

SELECT

n.nspname as schema,

c.relname as table,

f.attname as column,

f.attnum as column_id,

f.attnotnull as not_null,

f.attislocal not_inherited,

f.attinhcount inheritance_count,

pg_catalog.format_type(f.atttypid,f.atttypmod) AS data_type_full,

t.typname AS data_type_name,

CASE

WHEN f.atttypmod >= 0 AND t.typname <> 'numeric'THEN (f.atttypmod - 4) --first 4 bytes are for storing actual length of data

END AS data_type_length,

CASE

WHEN t.typname = 'numeric' THEN (((f.atttypmod - 4) >> 16) & 65535)

END AS numeric_precision,

CASE

WHEN t.typname = 'numeric' THEN ((f.atttypmod - 4)& 65535 )

END AS numeric_scale,

CASE

WHEN p.contype = 'p' THEN 't'

ELSE 'f'

END AS is_primary_key,

CASE

WHEN p.contype = 'p' THEN p.conname

END AS primary_key_name,

CASE

WHEN p.contype = 'u' THEN 't'

ELSE 'f'

END AS is_unique_key,

CASE

WHEN p.contype = 'u' THEN p.conname

END AS unique_key_name,

CASE

WHEN p.contype = 'f' THEN 't'

ELSE 'f'

END AS is_foreign_key,

CASE

WHEN p.contype = 'f' THEN p.conname

END AS foreignkey_name,

CASE

WHEN p.contype = 'f' THEN p.confkey

END AS foreign_key_columnid,

CASE

WHEN p.contype = 'f' THEN g.relname

END AS foreign_key_table,

CASE

WHEN p.contype = 'f' THEN p.conkey

END AS foreign_key_local_column_id,

CASE

WHEN f.atthasdef = 't' THEN d.adsrc

END AS default_value

FROM pg_attribute f

JOIN pg_class c ON c.oid = f.attrelid

JOIN pg_type t ON t.oid = f.atttypid

LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum

LEFT JOIN pg_namespace n ON n.oid = c.relnamespace

LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)

LEFT JOIN pg_class AS g ON p.confrelid = g.oid

WHERE c.relkind = 'r'::char

AND f.attisdropped = false

AND n.nspname = '%s' -- Replace with Schema name

AND c.relname = '%s' -- Replace with table name

AND f.attnum > 0

ORDER BY f.attnum

;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值