postgresql常用知识点一览

基本使用

1、连接数据库, 默认的用户和数据库是postgres

psql -U user -d dbname 

2、切换数据库,相当于mysql的use dbname

\c dbname

3、选择数据库,相当于mysql的show databases

\l list of databases

4、显示数据库

\d

5、列举表,相当于mysql的show tables

\dt

6、查看表结构,相当于desc tblname,show columns from tbname

\d tblname 

7、查看索引

\di

8、创建数据库:

create database [数据库名]; 
create database pgws_ex TEMPLATE=postgre; 可以继承扩展,比如说postgis等

9、删除数据库:

drop database [数据库名];  

10、重命名一个表:

alter table [表名A] rename to [表名B]; 

11、删除一个表:

drop table [表名];  

12、在已有的表里添加字段:

alter table [表名] add column [字段名] [类型]; 

13、删除表中的字段:

alter table [表名] drop column [字段名]; 

14、重命名一个字段:

alter table [表名] rename column [字段名A] to [字段名B]; 

15、给一个字段设置缺省值:

alter table [表名] alter column [字段名] set default [新的默认值];

16、去除缺省值:

alter table [表名] alter column [字段名] drop default; 

17、在表中插入数据:

insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); 

18、修改表中的某行某列的数据:

update [表名] set [目标字段名]=[目标值] where [该行特征]; 

19、删除表中某行数据:

delete from [表名] where [该行特征]; 
delete from [表名];--删空整个表 

20、创建表:

create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;); 

21、显示 PostgreSQL 的使用和发行条款

\copyright     

22、显示或设定用户端字元编码

\encoding [字元编码名称]

23、SQL 命令语法上的说明,用 * 显示全部命令

\h [名称] 

24、名称

\prompt [文本] 

25、提示用户设定内部变数

\password [USERNAME] securely change the password for a user

26、退出 psql

\q              

27、数据库备份

可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库: 
pg_dump drupal>/opt/Postgresql/backup/1.bak 

授权管理操作

1、超级管理员登录

su postgres
psql
或者:sudo -u postgres psql

2、创建用户

createuser -D -A -P username;

3、创建数据库并继承拓展

create database dbname TEMPLATE postgres owner username;

4、查询星期几

 SELECT extract(DOW FROM now())
DOW(day of week)
DAY(day of week)可以获取当天是当月的第几天

5、使用pg_dump导出数据

pg_dump --host 10.171.36.53 --port 5432 --username gavial -d gavial -t rnwststation >/home/rnwststation.sql
    -s 只导出表结构
    -t table1 -t table2 -t table3 多表导出

6、使用psql导入数据

psql -d gavial -U gavial --password -f /home/rnwststation.sql

PostgreSQL修改数据库表的列属性(ALTER语句)

1、向表中增加一个 varchar 列:

ALTER TABLE distributors ADD COLUMN address varchar(30);

2、从表中删除一个字段:

ALTER TABLE distributors DROP COLUMN address RESTRICT;

3、在一个操作中修改两个现有字段的类型:

ALTER TABLE distributors
ALTER COLUMN address TYPE varchar(80),
ALTER COLUMN name TYPE varchar(100);

4、对现存字段改名:

ALTER TABLE distributors RENAME COLUMN address TO city;

5、更改现存表的名字∶

ALTER TABLE distributors RENAME TO suppliers;

6、给一个字段增加一个非空约束:

ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;

7、从一个字段里删除一个非空约束:

ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;

8、给一个表增加一个检查约束:

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

9、删除一个表和它的所有子表的监查约束:

ALTER TABLE distributors DROP CONSTRAINT zipchk;

10、向表中增加一个外键约束:

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;

11、给表增加一个(多字段)唯一约束:

ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);

12、给一个表增加一个自动命名的主键约束,要注意的是一个表只能有一个主键:

ALTER TABLE distributors ADD PRIMARY KEY (dist_id);

13、把表移动到另外一个表空间:

ALTER TABLE distributors SET TABLESPACE fasttablespace;

14、把表移动到另外一个模式:

ALTER TABLE myschema.distributors SET SCHEMA yourschema;

15、之前表有2个字段, id和name, id是主键, 现在有需求增加一个index, 并且需求是主键改为id和index

alter table test add column test_index smallint not null default 0; 
alter table test drop constraint pk_test; 
alter table test add constraint pk_test PRIMARY_KEY(id, test_index); 

16、创建一个和原表结构相同的新表,根据INCLUDING保留原表的约束、索引等。

create table table_name (like parent_table {INCLUDING|EXCLUDING} {DEFAULTS|CONSTRAINTS|INDEXES|STORAGE|COMMENTS|ALL});

直接使用LIKE不使用INCLUDING,新表只保留原表的表结构和NOT NULL约束,但是使用INCLUDING CONSTRAINTS配置会保留了主键、唯一键、CHECK约束,并不会保留外键约束。

create table aqi201701 (like aqi201612 INCLUDING ALL)

17、将sql执行结果导出到文件

在psql中首先执行\o filename,然后执行要导出结果的sql语句即可。

psql test_db;
\o /tmp/test.out
select username from member where age > 18;

然后在/tmp/test.out文件中已经有了member表中age>18的所有用户的姓名,下载下来导入到excel中处理吧!

18、指定表的拥有者

alter table ${TABLE_NAME} owner to ${NEW_USER} ${DB_NAME}

19、查询postgresql当前的连接数

select pid,client_addr,query,state from pg_stat_activity order by client_addr

20、查看postgresql的最大连接数

show max_connections