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