项目开发中,为了方便公共查询接口,会将数据表和字段等信息配置存储起来,提供给属性查询、空间查询、缓存分析等使用,因此查询所有表名和查询表字段属性sql比较常用,这里记录一下。
查询所有模式
SELECT
pn.oid AS schema_oid,
iss.CATALOG_NAME,
iss.schema_owner,
iss.SCHEMA_NAME
FROM
information_schema.schemata iss
INNER JOIN pg_namespace pn ON pn.nspname = iss.SCHEMA_NAME;
查询结果:
根据模式名查询表名
根据表名查询当前模式下的所有表名以及中文注释:
SELECT DISTINCT
"table_name",
obj_description ( oid, 'pg_class' ) AS table_alias
FROM
information_schema.tables t1,
pg_class t2
WHERE
table_schema = '模式名称'
AND t1."table_name" = t2.relname
查询结果:
根据表名查询字段
根据表名查询字段属性,包括字段名、别名、类型、长度、主键等。
SELECT A
.attname AS field_name,-- 字段名
col_description ( A.attrelid, A.attnum ) AS field_alias,-- 字段别名
format_type ( A.atttypid, A.atttypmod ) AS field_type,-- 字段类型
( CASE WHEN atttypmod - 4 > 0 THEN atttypmod - 4 ELSE 0 END ) field_length,-- 字段长度
(
CASE
WHEN ( SELECT COUNT ( conname ) FROM pg_constraint WHERE conrelid = A.attrelid AND conkey [ 1 ]= attnum AND contype = 'p' ) > 0 THEN
'Y' ELSE'N'
END
) AS primary_key,-- 是否主键
CASE
A.attnotnull
WHEN 't' THEN
'Y' ELSE'N'
END AS is_null -- 是否为空
FROM
pg_attribute A
WHERE
attstattarget =- 1
AND attrelid = ( SELECT oid FROM pg_class WHERE relname = '表名' LIMIT 1 ) -- 这里限制一条记录,否则存在多个表名可能会引起报错)
查询结果: