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';
相关推荐
芯智工坊2 小时前
第10章 Mosquitto桥接模式
网络·数据库·人工智能·mqtt·开源·桥接模式
零陵上将军_xdr2 小时前
MySQL体系架构
数据库·mysql·架构
小陈工2 小时前
2026年4月5日技术资讯洞察:AI商业模式变革、知识管理革命与开源生态反击
开发语言·人工智能·python·安全·oracle·开源
fLDiSQV1W2 小时前
【MongoDB】MongoDB 概述
数据库·mongodb
谢白羽2 小时前
图数据库语义搜索性能实测:Neo4j vs FalkorDB vs Memgraph,谁的向量检索最快?
数据库·neo4j·memgraph·falkordb
电子科技圈2 小时前
SmartDV展示AI & HPC连接与存储IP解决方案,以解锁下一代算力芯片和节点的“速度密码”
网络·数据库·人工智能·嵌入式硬件·aigc·边缘计算
腾科IT教育2 小时前
Oracle OCP 认证考试到底怎么考?(附备考路线)
数据库·oracle·开闭原则·ocp认证·ocp培训
柒.梧.2 小时前
MySQL索引优化+慢查询全解析
数据库·mysql
这辈子谁会真的心疼你2 小时前
如何修改视频媒体修改时间?两个方法介绍
java·服务器·数据库