PostgreSQL常用脚本

1、Linux登录数据库
2、查看版本号
3、切换数据库和用户
4、创建数据库
5、杀掉进程
99、字典表

//////////////////////////////////////////////////////////
1、Linux登录数据库,输入第一条命令后,显示 -bash-4.2$,继续输入psql就进入数据库了。
su - postgres
psql
--退出,输入第一条命令后,显示 -bash-4.2$,继续输入第二条提示输入密码,就回到root了。
\q
su - root

2、查看版本号
show server_version;
show server_version_num;
select version();

3、切换数据库和用户
--需要在psql命令界面下
\c daname;
\c username;
--显示当前
select current_user, session_user;
select current_database();
--命令行显示当前
\c

4、创建数据库
--创建用户
create user common with password 'common';
--创建表空间。文件夹右键选择属性|安全,修改Users用户的权限为完全控制。
create tablespace common owner common location 'D:\Software\PostgreSQL\data\common';
drop tablespace common;
--创建数据库,lc_collate与lc_ctype对应postgresql.conf中的lc_messages对应的字符集
create database common with
owner = common
encoding = 'UTF8'
lc_collate = 'Chinese (Simplified)_China.936'
lc_ctype = 'Chinese (Simplified)_China.936'
tablespace = common
connection limit = -1;
--创建模式,先切换数据库到dbname下,psql命令下用:\c dbname;
create schema common authorization common;
alter schema name rename to new_name;
alter schema name owner to new_owner;
--search_path模式列表(可忽略):查询时先查用户对应的模式,找不到数据则按路径中的模式列表依次查询
show search_path;
select d.datname,s.setconfig from pg_db_role_setting s join pg_database d on d.oid=s.setdatabase;
alter database dbname set search_path to "$user", public;
alter database dbname reset search_path;

5、杀掉进程
--杀掉空闲进程
select pg_terminate_backend(pid) from pg_stat_activity where state='idle';
--关闭当前用户下的后台进程,向后台发送SIGINT信号,用于关闭事务,此时session还在,并且事务回滚
pg_cancel_backend()
--关闭所有的后台进程,需要superuser权限,向后台发送SIGTERM信号,用于关闭事务,此时session也会被关闭,并且事务回滚
pg_terminate_backend()

6、查询被锁定表、对象等
--ExclusiveLock查询的是排它锁
select * from pg_locks a
join pg_class b on a.relation = b.oid
join pg_stat_activity c on a.pid = c.pid
where a.mode like '%ExclusiveLock%';


99、字典表
pg_database        --数据库信息
pg_tablespace        --表空间信息
pg_tables            --表信息
pg_class            --对象信息
information_schema.tables    --数据库、模式、表对应关系
    
    
--查询表及其注释语句
select a.tablename,obj_description(relfilenode, 'pg_class') as 注释
from pg_tables a join pg_class b on a.tablename=b.relname where a.schemaname='schemaname';
--查询表详细信息,表对应的reltablespace为0时表示使用的是数据库默认表空间
select c.relname 表名,obj_description(c.relfilenode, 'pg_class') as 注释,c.relpages 页数,
pg_size_pretty(pg_relation_size(c.oid)) 大小,t.table_catalog 数据库,t.table_schema 模式,
case c.reltablespace when 0 then ss.spcname else s.spcname end as 表空间
from pg_class c
join information_schema.tables t on c.relname=t.table_name
join pg_database d on t.table_catalog=d.datname
join pg_tablespace ss on d.dattablespace=ss.oid
left join pg_tablespace s on c.reltablespace=s.oid
where c.relkind='r' and c.relname not like 'pg_%' and c.relname not like 'sql_%'
--查询列信息
select t.tableowner 用户,t.schemaname 模式,a.attnum 序号,c.relname 表名,a.attname 列名,
col_description(a.attrelid, a.attnum) 别名,format_type(a.atttypid, a.atttypmod) 类型
from pg_attribute a join pg_class c on a.attrelid=c.oid
join pg_tables t on c.relname=t.tablename
where a.attnum>0 and c.relkind='r' and c.relname not like 'pg_%' and c.relname not like 'sql_%'
--查询数据库默认表空间
select d.datname,d.dattablespace,s.spcname from pg_database d join pg_tablespace s on d.dattablespace=s.oid;

原文地址:https://www.cnblogs.com/publiter/p/15726814.html