关键词:ubuntu, postgres

数据库和表相关

登录数据库:

1
PGPASSWORD='password' psql -h host_addr -U dbp_lierhua -d 'database_name' -p 5438

导出指定数据库的全部表 schema:

1
2
3
pg_dump -h host_addr -p 5438 -U dbp_lierhua database_name -s -n yay > result.sql

-t 后面跟表名字,没有 -t 的话,直接跟数据库名字即可, -n 指定对应的 schema 的名字, -s  选项用来只导出表结构,而不会导出表中的数据

导出指定表的 schema 和所有数据:

1
2
3
pg_dump -h host_addr -p 5438 -U dbp_lierhua -t yay.table_name database_name > result.sql

-t 后面跟表名字,没有 -t 的话,直接跟数据库名字即可, -n 指定对应的 schema 的名字, -s  选项用来只导出表结构,而不会导出表中的数据

导出指定表的 schema:

1
2
3
pg_dump -h host_addr -p 5438 -U dbp_lierhua -t yay.table_name database_name -s > result.sql

-t 后面跟表名字,没有 -t 的话,直接跟数据库名字即可, -n 指定对应的 schema 的名字, -s  选项用来只导出表结构,而不会导出表中的数据

创建数据库:

1
CREATE DATABASE "database_name"; -- 记得带双引号

创建 schema 并应用到数据库:

1
2
CREATE schema yay
ALTER database "database_name" set search_path to "yay";

释放数据库 schema 到目标库:

1
2
3
4
5
6
PGPASSWORD='你的密码' psql -d database_name -U postgres -h 39.16.18.10(你机器的IP或者域名) -p 5432 -f ~/Desktop/database_name.sql
-d 指定要释放到的数据库
-U 用户名
-h 机器的地址
-p 机器开放的端口,不写默认是 5432
-f 要释放的文件的地址

不导出全表数据,导出部分数据到 CSV:

1
2
3
4
\COPY (SELECT * FROM table_name where id = '1157692') TO '/home/lierhua/result.test.csv' WITH csv; (postgres 里执行, 因此无需密码)

\COPY (select user_id, change_value, to_char(created, 'DD-MM-YYYY')  from coin_history) TO '/mnt/data/new/result.csv' WITH (FORMAT CSV, HEADER);

导出的部分表数据释放到其他库的表里:

1
2
3
\COPY ads_material FROM '~/Desktop/ads_material.test.csv' WITH csv; (postgre 里执行,因此无需密码)

\COPY 目标数据表 from 'csv 地址' with csv;

查询命令相关

array 查询:

1
2
3
select * from table_name where files @> array['https://lalala.com/v1/raw/5fa29ae1-949a-4b74-aa72-99ef78c5506907.mp4']::varchar[] limit 1;

select * from table_name where app_name @> array['name']::text[] limit 5;

参考