postgresql是一个强大的数据库, 支持多种复杂的数据结构和数学计算. mysql的使用者迁移到postgresql不是零成本的, 需要注意一些差异.

自增id

mysql中字段自增的关键字是auto_increment, psql中使用序列完成主键自增的功能.

create sequence "SEQ_NAME";
create table TNAME ("id" int not null primary key default nextval('SEQ_NAME'::regclass));

也可以使用serial关键字来自动创建序列

create table TNAME ("id" serial not null primary key);

此时自动创建的序列名称是表名_字段名_seq

使用序列有个好处是可以通过在多个表字段中使用同一序列实现多表唯一ID. 另外序列还可以设置跳数和最大最小值.

create sequence SEQNAME increment by 1 maxvalue 10 minvalue 1 start 1 cycle

指令操作

在mysql交互界面中, 可以执行以下指令

show databases;     //列出所有数据库
use DBNAME;         //切换当前数据库
show tables;        //列出所有表
desc table TNAME;   //显示表结构

psql中的执行稍有不同, 它们是

\l			//显示所有数据库
\d			//显示当前数据库的表(默认public模式)
\d TNAME			//显示表结构, 也可以显示索引信息; \d 后面可以跟通配符*或?
\d+ TNAME			//比\d更详细的信息, 比如注释, OID等
\dt			// 同上, 只匹配表
\ds			// 只匹配序列
\di			// 只匹配索引
\dv			// 只匹配视图
\df			// 只匹配函数
\dn			// 列出所有schema
\db			// 列出所有表空间
\dg 或 \du			// 列出角色或用户
\dp TNAME			//显示表权限分配情况
\timing on			//开启查看sql执行时间
set search_path='DBNAME'			//设置搜索路径