作者:太阳
1、连库相干
#连库$ psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]#连库并执行命令$ psql -h <hostname or ip> -p <端口> -d [数据库名称] -U <用户名> -c "运行一个命令;"
备注:
能够将连贯命令中的参数在环境变量中指定;比方环境变量中配置如下,那么执行psql等同于执行psql -h 192.168.56.11 -p 5432 testdb postgres。
export PGDATABASE=testdbexport PGHOST=192.168.56.11export PGPORT=5432export PGUSER=postgres
2、一些查看命令
#查看命令语法的帮忙命令\h#查看有哪些库\l#进入指定数据库\c $db_name#查看以后库下的所有pattern(表、视图、索引、序列)信息\d#查看以后库下的pattern(表、视图、索引、序列)信息,并输入具体内容\d +#查看以后库下某张表的构造定义或某个表的索引信息\d $table_name/$index_name#只查看以后库下表的信息\dt#只查看以后库下的索引信息\di#只查看以后库下的序列信息\ds#只查看以后库下的视图信息\dv#只查看以后库下的函数信息\df#列出以后库下所有shcema\dn#列出所有的表空间\db#列出所有的用户/角色的高级权限\du或\dg#列出表/视图/序列及拜访它们的相干权限\dp或\z#列出默认权限\ddp
3、批改库名
1.先敞开该库下的连贯会话:
# SELECT pg_terminate_backend(pg_stat_activity.pid)FROM pg_stat_activity WHERE datname='t1' AND pid<>pg_backend_pid(); pg_terminate_backend ---------------------- t(1 row)
阐明:
pg_terminate_backend:用来终止与数据库的连贯的过程id的函数。
pg_stat_activity:是一个零碎表,用于存储服务过程的属性和状态。
pg_backend_pid():是一个零碎函数,获取附加到以后会话的服务器过程的ID。
2.再用alter批改库名:
# alter database t1 rename to t2;ALTER DATABASE
4、复制数据库到雷同的实例
# 创立targetdb库并将sourcedb库中的数据复制到targetdbCREATE DATABASE targetdb WITH TEMPLATE sourcedb;
5、schema相干
#查看库下的schema: SELECT * FROM information_schema.schemata; 或者\dn#创立schema: create schema $schema_name;#创立schema并指定owner用户 create schema $schame_name authorization $user_name;#批改schema名称或属主 alter schema $old_name rename to $new_name; alter schema $schema_name owner to $new_owner;#查看以后所在的schema: show search_path;#切换schema: set search_path to $schema_name;#删除一个空的schema(其中所有对象已被删除): drop schema $schema_name;#删除schema及其中蕴含的所有对象: drop schema $schema_name cascade;
6、查看沉闷会话
#查看沉闷会话select * from pg_stat_activity where state<>'idle' ;#查看蕴含在事物内的会话select * from pg_stat_activity where state like '%idle%transaction%';#查看耗时1s以上的沉闷会话select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;
pg_stat_activity视图各字段含意:
字段 | 形容 |
---|---|
datid | 数据库OID。 |
datname | 数据库名称。 |
procpid | 后端过程的过程ID。(阐明:只有4.3版本反对procpid字段。) |
pid | 后端过程的过程ID。(阐明:只有6.0版本反对pid字段。) |
sess_id | 会话ID。 |
usesysid | 用户OID。 |
usename | 用户名。 |
current_query | 以后正在执行的查问。默认状况下,查问文本最多显示1024个字符,超出局部会被截断,如需显示更多字符,能够通过参数track_activity_query_size配置。(阐明:只有4.3版本反对current_query字段。) |
query | 最近查问的文本。如果state为active,显示以后正在执行的查问。在其余状态下,显示上一个执行的查问。 默认状况下,查问文本最多显示1024个字符,超出局部会被截断,如需显示更多字符,能够通过参数track_activity_query_size配置。(阐明:只有6.0版本反对query字段。) |
waiting | 如果以后SQL在锁期待,值为True,否则为False。 |
query_start | 以后流动查问开始执行的工夫。如果state不是active,显示上一个查问的开始工夫。 |
backend_start | 以后后端过程的开始工夫。 |
backend_xid | 后端过程以后的事务ID。 |
backend_xmin | 后端的xmin范畴。 |
client_addr | 客户端的IP地址。如果client_addr为空,示意客户端通过服务器上的Unix套接字连贯,或者示意过程是外部过程(例如AUTOVACUUM)。 |
client_port | 客户端和后端通信的TCP端口号。如果应用Unix套接字,值为-1。 |
client_hostname | 客户端主机名,通过client_addr的反向DNS查找报告。 |
application_name | 客户端利用名。 |
xact_start | 以后事务的启动工夫。如果没有流动事务,值为空。如果以后查问是第一个事务,值与query_start的值雷同。 |
waiting_reason | 以后执行期待的起因,可能是等锁或者期待节点间数据的复制。 |
state | 后端的以后状态,取值范畴:active,idle,idle in transaction,idle in transaction (aborted),fastpath function call,disabled。(阐明:只有6.0版本反对state字段。) |
state_change | 上次state状态切换的工夫。(阐明:只有6.0版本反对state_change字段。) |
rsgid | 资源组OID。 |
rsgname | 资源组名称。 |
rsgqueueduration | 对于排队查问,查问排队的总工夫。 |
7、kill会话
##kill会话select pg_terminate_backend($pid);##只勾销以后某一个过程的查问操作,但不能开释数据库连贯select pg_cancel_backend($pid);
8、查看库表大小
##1.查看各库大小:select datname, pg_size_pretty (pg_database_size(datname)) AS size from pg_database; ##2.查看以后库下各schema表数量select schemaname,count(*) from pg_stat_user_tables group by schemaname;##3.查看以后库下top 20表或去掉limit 20查看所有表大小select relname,schemaname, pg_size_pretty(pg_total_relation_size(relid)) from pg_stat_user_tables order by pg_total_relation_size(relid) desc limit 20;##4.查看某张表总大小(表数据+索引数据):select pg_size_pretty(pg_total_relation_size('xxx')); ##5.查看表数据大小,不蕴含索引:select pg_size_pretty(pg_table_size('xxx')); ##6.查看表的索引大小:select pg_size_pretty(pg_indexes_size('xxx'));
9、表字段变更
##1.减少字段:alter table tbl_name add column col_name [col definer] ;##2.删除字段:alter table tbl_name drop column col_name ;##3.减少束缚:alter table tbl_name add [constraint]; eg:alter table tbl_name alter column col_name set not null; (非空束缚)##4.删除束缚:alter table tbl_name drop constraint_name; ##(束缚名\d+ tbl_name查看) ##5.批改字段数据类型:alter table tbl_name alter column col_name [col definer]; eg:alter table tai alter column name type varchar(500);##6.重命名字段名称:alter table tbl_name rename column col_name to col_name_new;
10、pg_ctl
##1.初始化数据库实例pg_ctl init[db] [-s] [-D datadir] [-o options]##2.启动、敞开数据库实例等pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]pg_ctl status [-D datadir]##3.从新加载配置文件(pg_hba.conf、postgresql.conf等)pg_ctl reload [-s] [-D datadir]
pg_ctl后缀参数含意,详见官网文档:http://postgres.cn/docs/13/app-pg-ctl.html
11、查看一些信息
##1.查看以后数据库版本信息select version();##2.查看数据库的启动工夫select pg_postmaster_start_time();##3.查看最初load配置文件的工夫select pg_conf_load_time();备注:应用$pg_ctl reload会扭转配置的装载工夫##4.显示以后数据库时区show timezone;##5.查看以后用户名select user;或elect current_user;##6.查看session用户select session_user;##备注:session_user查看的是连贯数据库的原始用户,如果中途用set role扭转用户角色,用session_user查看的还是原始用户,用user查看的是扭转后的用户##7.查看以后连贯的数据库名称select current_catalog;或select current_database();##8.查看以后session所在客户端的IP及端口select inet_client_addr(),inet_client_port();##9.查看以后数据库服务器的IP地址及端口select inet_server_addr(),inet_server_port();##10.查看以后session的后盾服务过程的PIDselect pg_backend_pid();11.查看以后参数数值show xxx;或select current_setting('xxx');12.批改以后session的参数配置set xxx to 'xxx';或select set_config('xxx','xxx',false);13.查看以后正在写的WAL文件select pg_xlogfile_nale(pg_current_xlog_location());14.查看以后WAL文件的buffer还有多少字节没有写入磁盘select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());15.查看数据库实例是否正在做根底备份select pg_is_in_backup(),pg_backup_start_time();16.查看以后数据库实例处于Hot Standby状态还是失常数据库状态select pg_is_in_recovery();备注:如果后果为真,则为Hot Standby状态17.查看表对应的数据文件select pg_relation_filepath('xxx');
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw