暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Postgresql逻辑结构之database和schema(一)

原创 江湖小虾米 2024-01-21
1394

在逻辑上一个实例或集群由多个database组成,一个数据库包含多个schema,一个schema包含很多数据对象,如表、索引、视图等。database之间是隔离的,即一个数据库对象不能访问另外一个数据库中的对象。要访问其他数据库中的对象需要使用插件如DBLINK。逻辑结构如下图所示:

cluser(instance) | database1 database2 databasen | | | schema1 scheman schema1 scheman schema1 scheman
  1. 可以使用命令或sql查询视图获取数据库信息。
postgres=# \l+ List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description -----------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- mydb | myq | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8745 kB | pg_default | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8561 kB | pg_default | default administrative connection database template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | (4 rows) postgres=# SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges", CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname)) ELSE 'No Access' END as "Size", t.spcname as "Tablespace", pg_catalog.shobj_description(d.oid, 'pg_database') as "Description" FROM pg_catalog.pg_database d JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid ORDER BY 1; Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description -----------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- mydb | myq | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8745 kB | pg_default | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8561 kB | pg_default | default administrative connection database template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 8385 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | (4 rows)
  1. 查询schema信息
mydb=# \dn+ List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ myq | myq | | public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | (2 rows) mydb=# SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner", pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges", pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ myq | myq | | public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | (2 rows)
  1. 查询schema中表的信息
mydb=# \dt+ List of relations Schema | Name | Type | Owner | Persistence | Access method | Size | Description --------+----------+-------+-------+-------------+---------------+------------+------------- myq | accounts | table | myq | permanent | heap | 16 kB | myq | p | table | myq | permanent | heap | 8192 bytes | myq | t | table | myq | permanent | heap | 32 kB | (3 rows) mydb=# SELECT n.nspname as "Schema", c.relname as "Name", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 't' THEN 'TOAST table' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type", pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE c.relpersistence WHEN 'p' THEN 'permanent' WHEN 't' THEN 'temporary' WHEN 'u' THEN 'unlogged' END as "Persistence", am.amname as "Access method", pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size", pg_catalog.obj_description(c.oid, 'pg_class') as "Description" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam WHERE c.relkind IN ('r','p','') AND n.nspname <> 'pg_catalog' AND n.nspname !~ '^pg_toast' AND n.nspname <> 'information_schema' AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2; Schema | Name | Type | Owner | Persistence | Access method | Size | Description --------+----------+-------+-------+-------------+---------------+------------+------------- myq | accounts | table | myq | permanent | heap | 16 kB | myq | p | table | myq | permanent | heap | 8192 bytes | myq | t | table | myq | permanent | heap | 32 kB | (3 rows)
  1. 快捷命令和sql
    pg中的快捷命令内部也是通过sql语句查询相应的表和视图获取的信息。如上面所示的\l+,\dn+等。如何获取快捷命令的sql语句呢?可通过设置环境变量打开输出,然后执行快捷命令就会显示命令所执行的sql。
#注意变量名区分大小写 mydb=# \set ECHO_HIDDEN on mydb=# \dn+ ********* QUERY ********** SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner", pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges", pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; ************************** List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ myq | myq | | public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | (2 rows)

关闭sql显示为

mydb=# \set ECHO_HIDDEN off
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论