# 字段操作
# 添加字段
| alter table schema.table add column 字段名 varchar(50); |
| |
| alter table schema.table add column 字段名 int default(10); |
| alter table schema.table add column 字段名 int default '10'; |
# 修改字段名
| alter table schema.table rename 旧字段名 to 新字段名; |
# 修改字段类型
| alter table schema.table alter column 字段名 type 新类型; |
# 添加字段注释
| comment on column schema.table.column is '注释'; |
# 添加主键
| alter table schema.table add primary key(字段名); |
# 删除字段
| alter table schema.table drop 字段名; |
# jsonb 字段操作
样例数据
id | code | name | other |
---|
1 | 001 | zhangshan | |
2 | 002 | lisi | |
# 查询
| select * from schema.table where other::jsonb ->> 'id' = '1'; |
# 排序
# 更新数据
样例 1
旧数据 {"DEMO":{"code":"ERROR","name":"错误"}}
更新为 {"DEMO":{"code":"ERROR","name":"错误"}, "EXAMPLE":{"code":"NORMAL","name":"正常"}}
| update schema.table |
| set column = jsonb_set(column, '{EXAMPLE}', '{"code":"NORMAL","name":"正常"}'::jsonb) |
| where id = 'xxx'; |
样例 2
旧数据 {"DEMO":{"code":"ERROR","name":"错误"}}
更新为 {"DEMO":{"code":"NORMAL","name":"正常"}}
| update schema.table |
| set column = jsonb_set(column, '{DEMO,code}', '{"code":"NORMAL","name":"正常"}'::jsonb) |
| where id = 'xxx'; |
解释
jsonb_set (target jsonb, path text [], new_value jsonb [, create_missing boolean]) 四个参数的含义
- target:原 json 数据
- path:新 json 数据期望在原 json 数据中的路径,不存在则新增,存在则修改,如 {DEMO,code} 第一个 DEMO 表示原数据第一层 key-DEMO,第二个 code 表示原数据第二层 key-code
- new_value 期望插入 / 更新的 json 数据
- create_missing: 值为 true:如果元素值不存在,则添加;false: 元素值不存在,不添加 (默认为 true)
样例 3
旧数据 {"DEMO":{"code":"ERROR","name":"错误"}, "EXAMPLE":{"code":"NORMAL","name":"正常"}}
更新为 {"DEMO":{"code":"ERROR","name":"错误"}}
| update schema.table |
| set column = column - 'EXAMPLE' |
| where id = 'xxx'; |
# 索引操作
# 查看索引
| select * from pg_indexes where tablename = 'xxx'; |
| select * from pg_statio_all_indexes where relname = 'xxx'; |
# 跨库操作
| |
| create extension dblink; |
| |
| select * from pg_extension; |
| |
| UPDATE schema.table |
| SET 字段 = xxx |
| WHERE |
| ( 字段a, 字段b ) |
| IN ( SELECT T.字段a, T.字段b |
| FROM dblink ( 'host=xxx port=5432 dbname=xxx user=xxx password=xxx', |
| 'select 字段a,字段b from schema.table WHERE 字段c = ''xxx'' and 字段d = ''xxx'' ' ) |
| AS T ( 字段a TEXT, 字段b TEXT)); |