Files
mayfly-go/server/internal/db/dbm/dbi/metasql/pgsql_meta.sql
2025-02-20 17:07:13 +08:00

109 lines
3.3 KiB
SQL

--PGSQL_DB_SCHEMAS 库schemas
select
n.nspname as "schemaName"
from
pg_namespace n
where
has_schema_privilege(n.nspname, 'USAGE')
and n.nspname not like 'pg_%'
and n.nspname not like 'dbms_%'
and n.nspname not like 'utl_%'
and n.nspname != 'information_schema'
order by
n.nspname
---------------------------------------
--PGSQL_TABLE_INFO 表详细信息
SELECT
c.relname AS "tableName",
obj_description(c.oid) AS "tableComment",
pg_total_relation_size(c.oid) AS "dataLength",
pg_indexes_size(c.oid) AS "indexLength",
psut.n_live_tup AS "tableRows"
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
JOIN
pg_stat_user_tables psut ON psut.relid = c.oid
WHERE
has_table_privilege(c.oid, 'SELECT')
and n.nspname = current_schema()
{{if .tableNames}}
and c.relname in ({{.tableNames}})
{{end}}
ORDER BY
c.relname;
---------------------------------------
--PGSQL_INDEX_INFO 表索引信息
SELECT a.indexname AS "indexName",
'BTREE' AS "IndexType",
case when a.indexdef like 'CREATE UNIQUE INDEX%%' then 1 else 0 end as "isUnique",
obj_description(b.oid, 'pg_class') AS "indexComment",
indexdef AS "indexDef",
c.attname AS "columnName",
c.attnum AS "seqInIndex",
case when a.indexname like '%%_pkey' then 1 else 0 end AS "isPrimaryKey"
FROM pg_indexes a
join pg_class b on a.indexname = b.relname
join pg_attribute c on b.oid = c.attrelid
WHERE a.schemaname = (select current_schema())
AND a.tablename = '%s'
AND a.indexname not like '%%_pkey'
---------------------------------------
--PGSQL_COLUMN_MA 表列信息
SELECT
a.table_name AS "tableName",
a.column_name AS "columnName",
a.is_nullable AS "nullable",
t.typname AS "dataType",
a.character_maximum_length AS "charMaxLength",
a.numeric_precision AS "numPrecision",
CASE
WHEN a.column_default LIKE 'nextval%%' THEN NULL
ELSE a.column_default
END AS "columnDefault",
a.numeric_scale AS "numScale",
CASE
WHEN a.column_default LIKE 'nextval%%' THEN 1
ELSE 0
END AS "autoIncrement",
CASE
WHEN b.column_name IS NOT NULL THEN 1
ELSE 0
END AS "isPrimaryKey",
(
SELECT
description
FROM
pg_description
WHERE
objoid = c.oid
AND objsubid = a.ordinal_position
) AS "columnComment"
FROM
information_schema.columns a
LEFT JOIN information_schema.key_column_usage b ON a.table_schema = b.table_schema
AND b.table_name = a.table_name
AND b.column_name = a.column_name
JOIN pg_catalog.pg_class c ON c.relname = a.table_name
AND c.relnamespace = (
SELECT
oid
FROM
pg_catalog.pg_namespace
WHERE
nspname = a.table_schema
)
JOIN pg_catalog.pg_attribute att ON att.attrelid = c.oid
AND att.attname = a.column_name
JOIN pg_catalog.pg_type t ON t.oid = att.atttypid
WHERE
a.table_schema = (
SELECT
current_schema()
)
AND a.table_name IN (%s)
ORDER BY
a.table_name,
a.ordinal_position;