1、获取用户当前的所有数据库列表
通常,在大多数基于 PostgreSQL 的系统中,包括 openGauss,你可以使用 pg_catalog
模式下的系统表来查询数据库列表。然而,openGauss 可能会有些许不同,所以最好的做法是查阅 openGauss 的官方文档或使用以下 SQL 查询作为起点:
sql
SELECT datname AS "Database"
FROM pg_catalog.pg_database
WHERE datallowconn = true
AND NOT datistemplate;
2、获取系统所有的表空间名称
在 openGauss 数据库中,要获取所有的表空间信息,你可以查询系统表来检索这些信息。openGauss 的系统表结构与 PostgreSQL 类似,因为 openGauss 是基于 PostgreSQL 的一个分支。
要获取表空间信息,你可以查询 pg_tablespace
系统表。以下是一个 SQL 查询示例,该查询将返回 openGauss 中所有表空间的信息:
sql
SELECT
spcname
FROM
pg_catalog.pg_tablespace;
3、获取用户和角色列表
在 openGauss 数据库中,要获取所有的用户和角色列表,你可以查询系统目录表 pg_roles
或 pg_authid
(因为 pg_roles
通常是 pg_authid
的一个视图)。这些表包含了关于数据库用户和角色的信息。
以下是一个 SQL 查询示例,用于获取 openGauss 中所有的用户和角色列表
markdown
SELECT
*
FROM
pg_catalog.pg_roles
4、获取一个数据库的模式列表
在 openGauss 数据库中,要查询一个特定数据库下的模式(schema)列表,你可以使用 SQL 查询来检索 pg_namespace
系统表。这个表包含了数据库中所有模式的信息。
sql
SELECT nspname AS schema_name
FROM pg_namespace
WHERE nspname NOT IN ('pg_catalog', 'information_schema') -- 排除系统模式和信息模式
ORDER BY nspname;
5、获取一个模式下的函数和存储过程个数
sql
select * from information_schema.routines where routine_schema = 'information_schema'
6、获取一个模式下的表的总数
sql
SELECT COUNT(*) AS table_count
FROM pg_tables
WHERE schemaname = 'information_schema'
7、获取一个表的列名信息
sql
SELECT
attname AS column_name,
format_type(atttypid, atttypmod) AS data_type
FROM
pg_attribute
JOIN
pg_class ON attrelid = pg_class.oid
JOIN
pg_namespace ON relnamespace = pg_namespace.oid
WHERE
nspname = 'information_schema'
AND relname = 'sql_features'
AND attnum > 0
AND NOT attisdropped
ORDER BY
attnum;
8、 获取一个表的索引信息
在 openGauss 数据库中,要获取一个表的索引信息,你可以查询 pg_indexes
视图,但这会返回一个格式化的字符串列表,可能不够详细。更详细的索引信息可以从 pg_class
、pg_index
和其他系统目录中查询得到。
ini
SELECT * FROM pg_indexes WHERE tablename = 'employees';
9、获取一个表的约束信息
sql
SELECT conname, contype
FROM pg_constraint
WHERE conrelid = (SELECT oid FROM pg_class WHERE relname = 'employees');
10、获取一个表的ddl语句
arduino
SELECT pg_get_tabledef('employees');
11、获取一个表中列的精度和标度
sql
SELECT attname, atttypmod
FROM pg_attribute
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'employees') AND attnum > 0;
12、获取一个模式下的所有序列名称
ini
SELECT sequence_name
FROM information_schema.sequences
WHERE sequence_schema = 'public';
13、获取一模式下所有的视图名称
ini
SELECT viewname
FROM pg_views
WHERE schemaname = 'public';
14、获取一个模式下所有外表名称
sql
SELECT relname
FROM pg_class
WHERE relkind = 'f' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'your_schema_name');
15、获取一个模式下的所有触发器名称
sql
SELECT tgname FROM pg_trigger WHERE tgrelid IN (SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'your_schema_name'));
16、获取一个表的索引的ddl语句
ini
SELECT indexdef
FROM pg_indexes
WHERE tablename = 'employees' AND schemaname = 'public';