Postgresql
文章目录
Cheatsheat
导出数据库到 .sql 文件
psql 使用指南
参考:
PostgreSQL: Documentation: 9.4: psql
- psql 使用帮助
| 表格 | |||
| \dt | list tables | 列出所有表格 | |
| \d | table schema | ||
| \d+ | table schema detail | ||
| 数据库 | |||
| \l | \list databases | 列举数据库 | |
| \l+ | list databases detail | ||
| \h CREATE DATABASE | help on create database | 创建帮助 | |
| CREATE DATABASE | 创建 | ||
| \c <my-db> | \connect database | 连接,切换 db |
术语
meta-commands
形如 \dt, \l+ 等的命令就是 meta-commands
FAQ
list tables 所有表格信息列举
\dt 可以和通配符一起使用
\dt ***.*: 所有 schema 下的表\dt <name-of-schema>.*: 当前指定 schema 下的表格- eg: \dt public.*; public schema 下的所有表格
导出成 csv
\COPY SELECT * FROM <my-table> TO "/path/to/file.csv" WITH CSV
拼接 Group by 字符串结果
使用 string_agg
1 2 3SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;- 参考
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18select tab.pdf_name , tab.pdf_id , tab.paragraph_id , string_agg(tab.sentence, ' ') from (select pdf_metadata.pdf_name , pdf_tei.pdf_id , pdf_tei.paragraph_id , pdf_tei.sentence_id , pdf_tei.sentence from pdf_tei inner join pdf_metadata on pdf_tei.pdf_id = pdf_metadata.id where pdf_metadata.pdf_name ~ '^2009.*$' order by pdf_tei.pdf_id, pdf_tei.paragraph_id, pdf_tei.sentence_id) as tab group by tab.pdf_name , tab.pdf_id , tab.paragraph_id
docker compose
实现一
参考:
功能:
- postgres
- adminer
- pgadmin4
| |
备份和重建
数据库整体备份
使用 pg_dump
注意:
可能会遇到 pg_dump client version < pg_dump server version 的问题
- 解决方法: 使用 docker 临时调用一个 版本高的 postgresql 镜像中的 pg_dump 命令
| |
文章作者
上次更新 2025-02-24 (77fafc9)