PostgreSQL 常用语句

201 阅读2分钟

--查看版本详细信息

select version();    show server_version;  SHOW server_version_num;

**-- 查看PostgreSQL数据库服务器端编码:
**

****show server_encoding;\


-- 查看PostgreSQL客户端工具psql编码:

    show client_encoding;\


-- 指定Postgresql会话的客户端编码:

    set client_encoding to 'utf8';   \


**-- 创建用户
**

create user test with password 'test';\

create user test superuser password '123456';

 

**-- 修改用户密码
**

ALTER USER username WITH password '新密码';


**--创建表空间
**

create TABLESPACE ts_test owner test LOCATION 'D:/PostgreSQL/data';\


**--创建数据库
**

create DATABASE dbtest owner=test ENCODING='UTF-8' tablespace=ts_yczhdata connection LIMIT 1000;\

ALTER DATABASE dbtest  SET TABLESPACE ts_yczhdata;

**--授权用户
**

grant all PRIVILEGES on DATABASE dbtest to test;\


1、创建分区

/*创建索引分区表,有索引有分区

所有的主键和索引需要建立在分区内部,不能建立在表上面

*/

create table g_Voucher_P  (

  fCaseNum            VARCHAR(255)                  default '' not null,

  fCaseYear            SMALLINT                    default 0 not null,

  fVchID              integer                    default 0 not null,

  fID                  integer                    default 0 not null

)

partition by list (fCaseNum);

2、手动创建一个分区和分区索引

CREATE table p_0 PARTITION of g_voucher_p for values in('0');

create index IX_g_Voucher_P_VID on p_0 (

  fCaseNum ASC,

  fCaseYear ASC,

  fVID ASC

);

3、删除分区

--先删除分区关联关系

ALTER TABLE g_voucher_p DETACH PARTITION P_C01; 

--再删除实体分区表

drop table P_CO1;

 

4、增加一个分区

ALTER TABLE gg ATTACH PARTITION p_2 FOR VALUES IN (2); 

注意这里的子表p_2表得先建好,然后才能alter table 挂到主表gg上

--查询表空间信息\

SELECT oid, spcname, pg_get_userbyid(spcowner) AS owner, pg_tablespace_location(oid) As spclocation, spcacl, shobj_description(oid, 'pg_tablespace') AS comment\

FROM pg_tablespace WHERE spcname = 'ts_test';

--类似oracle的merge into 功能

insert into tab(a,b) values('1','2') on conflict(a) do update set b='2'

说明:conflict里是PK列\

--查询表信息

select * from pg_tables where schemaname='public';\

--查询列信息

select * from information_schema."columns" where table_schema='public';\

--查询所有索引

select * from pg_indexes where schemaname='public';

--查询分区

select * from pg_partitioned_table;

--用户函数统计信息

select * from pg_stat_user_functions;

--查询pg_hba.conf 文件信息

select * from pg_hba_file_rules;

--查询数据库文件夹名称信息(XX:\Program Files\PostgreSQL\11\data\base)下

SELECT oid,datname from pg_database ;

--查询表对应的存储位置

select pg_relation_filepath('p_auxtype');

--查询所有用户(角色)信息

select * from pg_user;

select * from pg_roles;

--查询序列

select * from pg_sequence

 

--定位分析消耗CPU高的SQL语句

SELECT procpid, START, now() - START AS lap, current_query  FROM ( SELECT backendid, pg_stat_get_backend_pid (S.backendid) AS procpid,

pg_stat_get_backend_activity_start (S.backendid) AS START,pg_stat_get_backend_activity (S.backendid) AS current_query  FROM (SELECT pg_stat_get_backend_idset () AS backendid) AS S) AS S WHERE current_query != ''  ORDER BY lap DESC;

--查看会话进程  

select * from pg_stat_activity where datname='dbtest';

--查询当前时间(yyyy-MM-dd hh:mm:ss)

select now()::timestamp(0)without time zone;

--查询指定分区表信息

relkindchar r=普通表,i=索引,S=序列,t= TOAST表, v=视图,m=物化视图,c=复合类型,f =外表,p=分区表

SELECT

    nmsp_parent.nspname AS parent_schema ,

    parent.relname AS parent ,

    nmsp_child.nspname AS child ,

    child.relname AS child_schema

FROM

    pg_inherits JOIN pg_class parent

        ON pg_inherits.inhparent = parent.oid JOIN pg_class child

        ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent

        ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child

        ON nmsp_child.oid = child.relnamespace

 

--查询库中所有分区表子表个数

SELECT nspname , relname , COUNT(*) AS partition_num

FROM pg_class c , pg_namespace n , pg_inherits i

WHERE

    c.oid = i.inhparent AND c.relnamespace = n.oid

    AND c.relhassubclass AND c.relkind = 'r'

GROUP BY 1,2 ORDER BY partition_num DESC;

--查询pg数据库启动时间和启动时长

select pg_postmaster_start_time() as starttime,CURRENT_TIMESTAMP-pg_postmaster_start_time() as uptime

--查询删除临时schema

select 'drop schema '||nspname||';' from pg_namespace where nspname like '%temp%'

--设置表nolog

alter table tablename set unlogged;

alter table tablename set logged;

PG的很多性能数据可以通过查询pg_stat_或pg_statio_开头的系统表获取