官网文档:https://www.postgresql.org/docs/9.6/index.html
参考文章:
https://www.jianshu.com/p/cd8c5b988e52
https://www.cnblogs.com/mchina/archive/2013/04/19/3028573.html
https://blog.csdn.net/ifucking/article/details/80005241
https://blog.csdn.net/zhu4674548/article/details/81880606
initdb 的时候会指定一个 PGDATA 目录,这就是 PostgresQL 存储数据的地方。典型的位置是在 /var/lib/postgres/data 或 /home/postgres/data
pg命令行:\l + 输出将包括数据库的数量,每个数据库的名称,其所有者,编码和访问权限:
\d 展示当前所有表
\d + 展示当前所有表和表的大小
base 目录是最重要的一个目录,放的是每一个 database 的数据。base 目录里的每一个数字目录对于一个 database 的 oid, 可以通过 查看 pg_database 这张表查看每一个 数据库的 oid 。
相当于mysql中的show datbases;
select oid, datname from pg_database ;
相当于mysql中的show tables;
select * from pg_tables;
或者
select * from information_schema.tables;
显示当前使用的schema
SHOW search_path;
set search_path TO myschema;
查看当前数据库中全部的Schema
select oid,* from pg_catalog.pg_namespace;
查看Schema下所有表的大小:
select relname, pg_size_pretty(pg_total_relation_size(relid)) from pg_stat_user_tables where schemaname='pentaho_dilogs' order by pg_relation_size (relid) desc;
查看所有数据库的大小:
select pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size from pg_database;
查询数据库中的所有表:
SELECT
pg_catalog.pg_relation_filenode(c.oid) as "Filenode",
relname as "Table Name"
FROM
pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_catalog.pg_database d ON d.datname = 'postgres'
WHERE
relkind IN ('r')
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND n.nspname !~ '^pg_toast'
ORDER BY
relname
查出所有表的大小,并排序
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes
清理Pentaho中postgres数据库
1. 表输入连接hibernate数据库
2. 运行上述查询语句
3.将占用空间大的表进行truncate等清理操作
参考文章:http://blog.itpub.net/22818880/viewspace-1966636/
Information_schema自动的存在于每个database中,里面包含了数据库中所有对象的定义信息。
Information_schema默认不存在于任何用户的search_path中,所以对所有用户都是隐藏的。\dn看不到,通过pgAdmin等客户端工具也不会自动显示。因此访问这个schema的任何视图都需要加上schema名。当然也可以通过修改search_path参数来访问。但PG不推荐这样做,因为里面的视图名称可能会跟用户应用程序中的对象名冲突。
Information_schema中的视图使用了几种特别的数据类型,如:cardinal_number 非负整数,yes_or_no相当于boolean
Information_schema中的视图基本都有权限校验,特定的用户只能看到特定的信息,也就是相当于Oracle中all_*开头的视图。其中几个重要的视图如下:
表信息:
information_schema.tables ,相当于Oracle中的all_tables
字段信息:
information_schema.columns,相当于Oracle中的all_tab_cloumns
procedure/function:
routines, 不包括package,因为pg不支持package
约束信息:
information_schema.table_constraints。另外在constraint_column_usage视图中有约束相关的字段信息;在referential_constraints中有关于外键约束的进一步的信息;在check_constraints中有关于check约束的进一步信息。key_column_usage记录了除check约束之外的其他约束相关的字段信息(check约束在check_constraints中已有记录)。
注意这个table_constraints不要跟constraint_table_usage搞混了。前者是记录了所有约束;而后者是记录了所有有相关约束的表(当然也有约束名显示),但不包括check约束。所以后者在我看来是没什么用的
权限信息:
table_privileges中记录了表权限,column_privileges中记录了列上的权限,routine_privileges上记录了function/procedure的权限,role_usage_grants记录了sequence/domain等类型的对象的usage权限,跟usage_privileges类似
在命令号里,\dp或\z也可以看到相关对象的授权信息
视图信息:
Views中记录视图基础信息,view_table_usage记录视图所依赖的表,view_routine_usage记录所依赖的function, view_column_usage记录所涉及的字段