Database Commands
-- 创建数据库CREATE DATABASE oa_db;
-- 给数据库添加注释COMMENT ON DATABASE oa_db IS '业务数据库';| 命令 | 说明 | 示例 |
|---|---|---|
| \l | 列出所有数据库 | \l |
| \l+ | 查看详细信息 | \l+ |
| SELECT语句 | 查询系统表 | SELECT datname FROM pg_database; |
-- 切换到oa_db\c oa_db
-- 查看当前连接信息\conninfo-- 删除数据库(需要先断开数据库连接)DROP DATABASE oa_db;
-- 强制删除(如果有连接)DROP DATABASE oa_db WITH (FORCE);-- 重命名数据库ALTER DATABASE oldname RENAME TO newname;Schema核心操作
Section titled “Schema核心操作”创建Schema
Section titled “创建Schema”-- 创建普通SchemaCREATE SCHEMA my_schema;COMMENT ON SCHEMA my_schema IS '业务模块A的数据空间';
-- 创建指定所有者的SchemaCREATE SCHEMA sales_schema AUTHORIZATION sales_user;
-- 创建Schema并设置权限CREATE SCHEMA finance_schema;GRANT USAGE ON SCHEMA finance_schema TO finance_user;查看Schema信息
Section titled “查看Schema信息”-- 查看所有Schema\dn\dn+ -- 查看详细信息
-- 查看特定Schema下的对象\dt my_schema.* -- 查看所有表\dv my_schema.* -- 查看所有视图\df my_schema.* -- 查看所有函数
-- 通过SQL查询SELECT schema_name, schema_ownerFROM information_schema.schemataORDER BY schema_name;使用Schema
Section titled “使用Schema”-- 切换默认Schema(会话级别)SET search_path TO my_schema, public;
-- 在当前搜索路径创建表(自动使用第一个Schema)CREATE TABLE users (id SERIAL, name TEXT);
-- 指定Schema创建表(推荐显式指定)CREATE TABLE my_schema.products ( id SERIAL PRIMARY KEY, name VARCHAR(200) NOT NULL, price NUMERIC(10,2));
-- 指定Schema查询数据SELECT * FROM my_schema.products;SELECT * FROM public.users; -- 显式指定public schema修改Schema
Section titled “修改Schema”-- 重命名SchemaALTER SCHEMA my_schema RENAME TO new_schema;
-- 修改所有者ALTER SCHEMA my_schema OWNER TO new_owner;
-- 修改注释COMMENT ON SCHEMA my_schema IS '新的说明信息';删除Schema
Section titled “删除Schema”-- 删除空SchemaDROP SCHEMA IF EXISTS my_schema;
-- 删除Schema及其所有对象(谨慎使用!)DROP SCHEMA my_schema CASCADE;基础备份操作
Section titled “基础备份操作”单数据库备份
Section titled “单数据库备份”# 基本备份(默认格式,二进制)pg_dump mydb > /tmp/mydb.dump
# 备份为SQL文件(可读、可编辑)pg_dump mydb --format=plain --file=/tmp/mydb.sql
# 压缩备份(节省空间)pg_dump mydb | gzip > /tmp/mydb.sql.gz
# 带加密的备份pg_dump mydb | gpg -c > /tmp/mydb.sql.gpg连接参数详解
Section titled “连接参数详解”# 完整连接参数pg_dump \ --host=localhost \ --port=5432 \ --username=postgres \ --dbname=mydb \ --file=/tmp/mydb.sql
# 使用连接字符串pg_dump "postgresql://postgres:password@localhost:5432/mydb" > backup.sql
# 使用密码文件(避免密码暴露)echo "localhost:5432:mydb:postgres:password" > ~/.pgpasschmod 600 ~/.pgpasspg_dump mydb > backup.sql备份选项优化
Section titled “备份选项优化”# 常用选项组合pg_dump mydb \ --verbose \ # 显示详细过程 --clean \ # 包含DROP语句 --create \ # 包含CREATE DATABASE --if-exists \ # 与--clean一起使用,添加IF EXISTS --no-owner \ # 不设置对象所有者 --no-privileges \ # 不备份权限 --encoding=UTF8 \ # 指定编码 --jobs=4 \ # 并行备份(目录格式) > backup.sql完整集群备份
Section titled “完整集群备份”备份所有数据库
Section titled “备份所有数据库”# 备份整个PostgreSQL集群pg_dumpall \ --host=localhost \ --username=postgres \ --file=/tmp/pg_backup.sql
# 备份并压缩pg_dumpall | gzip > /tmp/pg_backup_$(date +%Y%m%d).sql.gz数据库恢复操作
Section titled “数据库恢复操作”从SQL文件恢复
Section titled “从SQL文件恢复”# 创建新数据库并恢复createdb newdbpsql newdb < /tmp/mydb.sql
# 直接恢复(SQL文件包含CREATE DATABASE)psql --file=/tmp/mydb.sql postgres
# 恢复时显示进度psql --echo-all --file=/tmp/mydb.sql newdb
# 恢复压缩的备份gunzip -c /tmp/mydb.sql.gz | psql newdb从二进制备份恢复
Section titled “从二进制备份恢复”# 恢复自定义格式备份pg_restore \ --dbname=newdb \ --verbose \ /tmp/mydb.dump
# 只恢复表结构(无数据)pg_restore \ --dbname=newdb \ --schema-only \ /tmp/mydb.dump
# 只恢复数据pg_restore \ --dbname=newdb \ --data-only \ /tmp/mydb.dump
# 恢复特定表pg_restore \ --dbname=newdb \ --table=users \ --table=orders \ /tmp/mydb.dump恢复整个集群
Section titled “恢复整个集群”# 先删除现有数据库(谨慎操作!)dropdb --if-exists mydbdropdb --if-exists otherdb
# 恢复所有数据库psql --file=/tmp/pg_backup.sql postgres
# 并行恢复(提高速度)pg_restore \ --jobs=4 \ --dbname=postgres \ /tmp/pg_backup.dump