PostgreSQL 常用操作
增删改查 SQL 语句
1-- 插入数据
2INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');
3
4-- 查询记录
5SELECT * FROM user_tbl;
6
7-- 更新数据
8UPDATE user_tbl set name = '李四' WHERE name = '张三';
9
10-- 删除记录
11DELETE FROM user_tbl WHERE name = '李四' ;
批量更新 SQL 语句
1-- 批量更新一个字段
2UPDATE mytable
3SET myfield = CASE id
4 WHEN 1 THEN 'value'
5 WHEN 2 THEN 'value'
6 WHEN 3 THEN 'value'
7END
8WHERE id IN (1,2,3)
9
10-- 批量更新多个字段
11UPDATE categories
12SET display_order = CASE id
13 WHEN 1 THEN 3
14 WHEN 2 THEN 4
15 WHEN 3 THEN 5
16END,
17title = CASE id
18 WHEN 1 THEN 'New Title 1'
19 WHEN 2 THEN 'New Title 2'
20 WHEN 3 THEN 'New Title 3'
21END
22WHERE id IN (1,2,3)
序列操作 SQL 语句
1-- 查看当前序列的值
2SELECT currval('user_id_seq');
3SELECT last_value FROM user_id_seq;
4
5-- 设置序列的初始值为 100
6SELECT setval('user_id_seq',100);
7
8-- 递增序列的值并返回
9SELECT nextval('user_id_seq');
查询 SQL 语句
1-- 转换时间戳为格式化时间函数 TO_TIMESTAMP()
2SELECT TO_TIMESTAMP(created_at) FROM user;
3
4-- 转换时间戳为格式化时间函数 TO_TIMESTAMP() ,显示为中国时区
5-- 使用 'CST' 时区不一定显示为中国本地时间,建议使用 'Asia/Shanghai' 时区
6SELECT TO_TIMESTAMP(created_at) AT TIME ZONE 'CST' FROM user;
7SELECT TO_TIMESTAMP(created_at) AT TIME ZONE 'Asia/Shanghai' FROM user;
8SELECT TO_CHAR(TO_TIMESTAMP(created_at) AT TIME ZONE 'UTC-8', 'YYYY-MM-DD HH24:MI:SS') FROM user;
9
10-- 返回字段中的条件判断
11SELECT name, CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '保密' END AS sex, age FROM user;
12
13-- 拼接字符串
14SELECT CONCAT('姓名:', name) AS name, age FROM user;
15
16-- 数值计算
17SELECT id, amount/100 FROM order;
18
19-- 保留 2 位小数精度
20SELECT id, round(100/3, 2) FROM order;
21
22-- 解析数组格式数据,获取数据时先将数组转为 JSON,再用编程语言函数将 JSON 转为可识别格式,例如 PHP 中的 json_decode()
23SELECT array_to_json(ids) FROM user;
Schema 操作 SQL 语句
1-- 创建新表
2CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
3
4-- 添加字段
5ALTER TABLE user_tbl ADD email VARCHAR(40);
6ALTER TABLE user_tbl ADD COLUMN images jsonb DEFAULT '{}';
7
8-- 更改字段类型
9ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;
10
11-- 更改字段类型长度
12ALTER TABLE user_tbl ALTER COLUMN password TYPE varchar(32);
13
14-- 为字段添加索引
15CREATE INDEX index_name ON user_tbl (name);
16
17-- 设置字段默认值(注意字符串使用单引号)
18ALTER TABLE user_tbl ALTER COLUMN email SET DEFAULT '[email protected]';
19
20-- 设置字段默认值为指定序列(通常用于主键字段)
21ALTER TABLE user_tbl ALTER COLUMN id SET DEFAULT nextval('user_id_seq');
22
23-- 去除字段默认值
24ALTER TABLE user_tbl ALTER email DROP DEFAULT;
25
26-- 去除字段不为空限制
27ALTER TABLE user_tbl ALTER email DROP NOT NULL;
28
29-- 重命名字段
30ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;
31
32-- 删除字段
33ALTER TABLE user_tbl DROP COLUMN email;
34
35-- 表重命名
36ALTER TABLE user_tbl RENAME TO backup_tbl;
37
38-- 删除表
39DROP TABLE IF EXISTS backup_tbl;
40
41-- 删除库
42DROP DATABASE IF EXISTS hello;
创建数据表例子
1CREATE TABLE lm_user(
2 id SERIAL PRIMARY KEY NOT NULL, -- 'ID'
3 openid VARCHAR(20) DEFAULT NULL UNIQUE, -- 'OPENID'
4 email VARCHAR(50) NOT NULL UNIQUE, -- 'email'
5 mobilephone CHAR(15) DEFAULT NULL UNIQUE, -- '手机号码'
6 password VARCHAR(60) NOT NULL, -- '登录密码'
7 name VARCHAR(20) DEFAULT NULL, -- '姓名'
8 num INT NOT NULL DEFAULT '0', -- ''
9 status SMALLINT NOT NULL DEFAULT '1' -- '状态'
10);
常用控制台命令
\password 设置密码。
\q 退出。
\h 查看SQL命令的解释,比如\h select。
\? 查看psql命令列表。
\l 列出所有数据库。
\c [database_name] 连接其他数据库。
\d 列出当前数据库的所有表格。
\d [table_name] 列出某一张表格的结构。
\du 列出所有用户。
\e 打开文本编辑器。
\conninfo 列出当前数据库和连接的信息。
备份和恢复
pg_dump 备份
pg_dumpall 备份所有数据库
pg_restore 恢复
psql exampledb < exampledb.sql 导入数据
参考 & 扩展阅读