postgresql日常运用

一、基础认知与登录

1. 核心定义

  • PostgreSQL(简称 PG/PgSQL):开源、稳定、标准兼容、支持复杂查询与扩展的企业级关系型数据库。
  • 默认超级用户:postgres(必须用此用户登录操作)。
  • 交互终端:psql(PG 自带命令行工具)。

二、数据库操作

  • 必须使用 postgres 用户登录
sql 复制代码
su - postgres
psql
  • 登录提示符:postgres=#

1. 列出数据库

  • 元命令:\l(简洁)、\l+(详细,含大小、表空间)

  • SQL 命令:SELECT datname FROM pg_database;

2. 创建 / 删除 / 切换数据库

sql 复制代码
CREATE DATABASE mydb;
DROP DATABASE mydb;
\c mydb  -- 切换库

3. 查看数据库大小

sql 复制代码
SELECT pg_database_size('mydb');                -- 字节
SELECT pg_size_pretty(pg_database_size('mydb'));-- 易读格式

三、常用元命令(psql 专用)

\ 开头,非 SQL 语句,用于快速管理:

元命令 作用
\? 查看所有元命令帮助
\q 退出 psql
\l / \l+ 列出所有数据库(+ 显示大小 / 表空间 / 描述)
\c 库名 切换数据库
\dn / \dn+ 列出所有模式(Schema)
\dt / \dt+ 列出当前库表(+ 显示详细信息)
\d 表名 查看表结构
\du / \du+ 列出所有用户 / 角色
\db 列出所有表空间
\dt *.* 列出所有表(含系统表)

四、数据表操作

1. 列出表

sql 复制代码
\dt
\dt *.*        -- 所有表(含系统表)
\dt myschema.* -- 指定模式下的表
SELECT * FROM pg_tables WHERE schemaname='public';

2. 创建 / 删除 / 复制表

sql 复制代码
CREATE TABLE test(id int, name char(10), age int);
DROP TABLE test;
CREATE TABLE test2 AS TABLE test; -- 复制结构+数据

五、模式(Schema)操作

1. 模式作用

  • 逻辑分组,避免命名冲突

  • 类似文件夹,支持权限隔离

2. 常用命令

sql 复制代码
CREATE SCHEMA hr;
DROP SCHEMA hr;
DROP SCHEMA hr CASCADE; -- 强制删除含对象的模式
\dn                     -- 查看模式

3. 搜索路径 search_path

  • 查看:SHOW search_path;

  • 设置:SET search_path TO hr, public;

  • 当前模式:SELECT current_schema();

4. 指定模式建表

sql 复制代码
CREATE TABLE hr.employees(id SERIAL PRIMARY KEY, name TEXT);

六、数据增删改查

sql 复制代码
INSERT INTO test VALUES(1,'zhangsan',18);
SELECT * FROM test;
UPDATE test SET age=20 WHERE id=1;
DELETE FROM test WHERE id=1;

七、备份与恢复

1. SQL 转储(pg_dump)

  • 备份单库:
sql 复制代码
pg_dump mydb > dump.sql
  • 跨机直接迁移:
sql 复制代码
pg_dump -h host1 mydb | psql -h host2 mydb

2. 恢复

sql 复制代码
createdb -T template0 mydb
psql mydb < dump.sql
  • 安全恢复:psql -1 --set ON_ERROR_STOP=on mydb < dump.sql

3. 全集群备份(pg_dumpall)

sql 复制代码
pg_dumpall > all.sql
psql -f all.sql postgres
  • 仅备份全局信息(角色 / 表空间):pg_dumpall --globals-only

八、远程连接配置

1. 修改监听地址

文件:postgresql.conf

sql 复制代码
listen_addresses = '*'

2. 配置访问权限

文件:pg_hba.conf

sql 复制代码
host  all  all  0.0.0.0/0  scram-sha-256
  • 认证方式:trust(无密码,仅测试)、md5scram-sha-256(推荐)

3. 重启生效

复制代码
systemctl restart postgresql

4. 远程连接

复制代码
psql -h 服务器IP -U postgres -d 库名

九、密码重置

  1. 备份 pg_hba.conf

  2. 本地认证改为 md5

  3. 重启服务

  4. 登录修改密码:

复制代码
ALTER USER postgres WITH PASSWORD '新密码';
  1. 恢复配置并重启

十、核心要点总结

  1. postgres 是默认超级用户

  2. 模式(Schema)实现库内逻辑隔离,支持同名表

  3. pg_dump 兼容跨版本、跨架构迁移

  4. 生产环境禁用 trust 认证,使用 scram-sha-256

  5. 定期备份 + 日志归档 = 数据安全

相关推荐
Gauss松鼠会5 分钟前
GaussDB数据库统计信息自动收集机制
数据库·经验分享·sql·oracle·gaussdb
许彰午12 分钟前
# Oracle shutdown immediate关不掉——一次排坑实录
数据库·oracle
消失的旧时光-194315 分钟前
SQL 怎么学(工程实战总纲|用一套用户模型打穿全流程)
java·数据库·sql
abc123456sdggfd19 分钟前
如何统一SQL视图报错信息_使用异常处理机制包装视图
jvm·数据库·python
qq_4609784019 分钟前
如何处理SQL循环逻辑_探索递归CTE实现复杂计算
jvm·数据库·python
码农阿豪20 分钟前
Django接金仓数据库:我踩过的坑和填坑指南
数据库·python·django
疯狂成瘾者20 分钟前
Prompt分层策略
前端·数据库·prompt
2401_8314194421 分钟前
C++如何利用YAML存储复杂的数学矩阵_Eigen库结合yaml-cpp用法【实战】
jvm·数据库·python
2401_8987176622 分钟前
如何进行SQL数学计算_运用ROUND与CEIL处理数值精度
jvm·数据库·python
2501_9012005323 分钟前
Pytest 实现两级参数化:让服务名依赖于应用名的灵活测试方案
jvm·数据库·python