PostgreSQL 日常维护

一、基本使用

1. 连接数据库
  • 使用 PostgreSQL 自带的命令行客户端 psql 是最基本的方式:

    bash 复制代码
    psql -U <username> -d <database_name> -h <host> -p <port>
    • -U: 指定用户名
    • -d: 指定要连接的数据库名
    • -h: 指定数据库服务器主机地址(本地可省略或用 localhost
    • -p: 指定数据库服务器端口(默认 5432 可省略)
  • 连接成功后,会进入 psql 的交互式命令行界面,提示符通常类似 database_name=>

2. 用户与权限管理
  • 创建用户

    sql 复制代码
    CREATE USER username WITH PASSWORD 'your_password';
    • 更精细控制可使用 CREATE ROLE
  • 修改用户密码

    sql 复制代码
    ALTER USER username WITH PASSWORD 'new_password';
  • 授权 :授予用户对特定数据库对象的访问权限(如 SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES)。

    sql 复制代码
    GRANT privilege_type ON database_name.table_name TO username;
    -- 示例:授予 SELECT 权限
    GRANT SELECT ON employees TO report_user;
  • 撤销权限

    sql 复制代码
    REVOKE privilege_type ON database_name.table_name FROM username;
  • 查看用户权限 :可通过系统视图 information_schema.role_table_grantspg_roles 查询。

3. 数据库操作
  • 创建数据库

    sql 复制代码
    CREATE DATABASE database_name;
    • 可指定所有者 OWNER username
  • 切换当前数据库 (在 psql 内):

    sql 复制代码
    \c database_name
  • 列出所有数据库

    sql 复制代码
    \l
  • 删除数据库

    sql 复制代码
    DROP DATABASE database_name;
    • 注意:删除数据库操作不可逆,需谨慎。
4. 表操作
  • 创建表

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype [constraints],
        column2 datatype [constraints],
        ...
    );
    • 常用数据类型:INTEGER, BIGINT, NUMERIC, VARCHAR(n), TEXT, DATE, TIMESTAMP, BOOLEAN 等。
    • 常用约束:PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, CHECK
  • 查看表结构

    sql 复制代码
    \d table_name
  • 修改表 (添加列):

    sql 复制代码
    ALTER TABLE table_name ADD COLUMN new_column datatype;
  • 重命名表

    sql 复制代码
    ALTER TABLE old_table_name RENAME TO new_table_name;
  • 删除表

    sql 复制代码
    DROP TABLE table_name;
5. 数据操作
  • 插入数据

    sql 复制代码
    INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  • 查询数据

    sql 复制代码
    SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY ...] [LIMIT ...];
  • 更新数据

    sql 复制代码
    UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
    • 重要 :务必使用 WHERE 子句限定范围,否则会更新所有行!
  • 删除数据

    sql 复制代码
    DELETE FROM table_name WHERE condition;
    • 重要 :务必使用 WHERE 子句限定范围,否则会删除所有数据!
6. 索引管理
  • 创建索引 (加速查询):

    sql 复制代码
    CREATE INDEX index_name ON table_name (column_name);
    • 可创建唯一索引 CREATE UNIQUE INDEX ...
    • 可创建多列索引 CREATE INDEX ... ON table_name (col1, col2)
  • 查看索引

    sql 复制代码
    \d table_name -- 会列出表相关的索引
  • 删除索引

    sql 复制代码
    DROP INDEX index_name;
7. 备份与恢复
  • 逻辑备份 (pg_dump) :导出数据库结构和数据(文本或自定义格式)。

    • 备份单个数据库:

      bash 复制代码
      pg_dump -U username -d database_name -f backup_file.sql
    • 备份所有数据库(需超级用户权限):

      bash 复制代码
      pg_dumpall -U postgres -f all_databases.sql
  • 恢复逻辑备份

    bash 复制代码
    psql -U username -d database_name -f backup_file.sql
  • 物理备份 (文件系统级) :复制 PGDATA 目录下的数据文件。通常需要结合 基础备份 (Base Backup)WAL 归档 (Write-Ahead Log Archiving) 来实现持续恢复(PITR)。这属于更高级的维护范畴。

8. 查看系统信息
  • 查看版本

    sql 复制代码
    SELECT version();
  • 查看活动连接

    sql 复制代码
    SELECT * FROM pg_stat_activity;
  • 查看数据库大小

    sql 复制代码
    SELECT pg_size_pretty(pg_database_size('database_name'));
  • 查看表大小

sql 复制代码
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
9.远程连接

修改 pg_hba.conf 文件

路径通常为 /etc/postgresql/{版本}/main/pg_hba.conf

添加规则

plaintext 复制代码
host    all             all             {客户端IP或网段}       md5

示例(允许所有 IP):

plaintext 复制代码
host    all             all             0.0.0.0/0               md5

修改 postgresql.conf 文件

路径通常为 /etc/postgresql/{版本}/main/postgresql.conf

启用监听

plaintext 复制代码
listen_addresses = '*'   # 监听所有网络接口

重启 PostgreSQL 服务

bash 复制代码
sudo systemctl restart postgresql

配置防火墙

开放默认端口 5432

bash 复制代码
sudo ufw allow 5432/tcp

客户端连接命令

bash 复制代码
psql -h {服务器IP} -U {用户名} -d {数据库名}

示例:

bash 复制代码
psql -h 192.168.1.100 -U postgres -d testdb

关键注意事项

安全建议

避免使用 0.0.0.0/0(可替换为具体 IP 段)。

生产环境建议使用证书认证(cert 替代 md5)。

常见问题排查

检查服务状态:sudo systemctl status postgresql

验证端口监听:netstat -tuln | grep 5432

客户端测试连通性:telnet {服务器IP} 5432

密码认证

若使用 md5,需确保用户密码已设置:

sql 复制代码
ALTER USER postgres PASSWORD 'your_password';
相关推荐
小羽网安1 小时前
从零开始学习 sql 注入,常见的 sql 注入解析
数据库·sql·学习
2401_846339562 小时前
CSS如何优化大型项目样式_使用SASS预处理器提升开发效率
jvm·数据库·python
ss2738 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
l1t9 小时前
DeepSeek总结的数据库外部表
数据库
m0_674294649 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
014-code9 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
运气好好的9 小时前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
それども10 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql
wenha10 小时前
数据库隔离级别
数据库·mysql·sqlserver·隔离级别
2401_8714928510 小时前
Layui如何修改Layui默认的UI主题颜色(换肤功能实现)
jvm·数据库·python