Files
mayfly-go/server/internal/db/dbm/dbi/metasql/pgsql_meta.sql

109 lines
3.3 KiB
MySQL
Raw Normal View History

--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
---------------------------------------
2023-05-24 12:32:17 +08:00
--PGSQL_TABLE_INFO
2025-02-20 17:07:13 +08:00
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()
2024-03-18 12:25:40 +08:00
{{if .tableNames}}
and c.relname in ({{.tableNames}})
{{end}}
2025-02-20 17:07:13 +08:00
ORDER BY
c.relname;
---------------------------------------
2023-05-24 12:32:17 +08:00
--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",
2024-05-23 17:18:22 +08:00
case when a.indexname like '%%_pkey' then 1 else 0 end AS "isPrimaryKey"
2023-11-23 10:36:20 +08:00
FROM pg_indexes a
join pg_class b on a.indexname = b.relname
join pg_attribute c on b.oid = c.attrelid
2023-11-23 10:36:20 +08:00
WHERE a.schemaname = (select current_schema())
AND a.tablename = '%s'
2024-05-23 17:18:22 +08:00
AND a.indexname not like '%%_pkey'
---------------------------------------
2023-05-24 12:32:17 +08:00
--PGSQL_COLUMN_MA
2025-02-20 17:07:13 +08:00
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;