当前位置: 首页 > news >正文

PostgreSQL 日常维护

一、基本使用

1. 连接数据库
  • 使用 PostgreSQL 自带的命令行客户端psql是最基本的方式:
    psql -U <username> -d <database_name> -h <host> -p <port>
    • -U: 指定用户名
    • -d: 指定要连接的数据库名
    • -h: 指定数据库服务器主机地址(本地可省略或用localhost
    • -p: 指定数据库服务器端口(默认5432可省略)
  • 连接成功后,会进入psql的交互式命令行界面,提示符通常类似database_name=>
2. 用户与权限管理
  • 创建用户
    CREATE USER username WITH PASSWORD 'your_password';
    • 更精细控制可使用CREATE ROLE
  • 修改用户密码
    ALTER USER username WITH PASSWORD 'new_password';
  • 授权:授予用户对特定数据库对象的访问权限(如SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES)。
    GRANT privilege_type ON database_name.table_name TO username; -- 示例:授予 SELECT 权限 GRANT SELECT ON employees TO report_user;
  • 撤销权限
    REVOKE privilege_type ON database_name.table_name FROM username;
  • 查看用户权限:可通过系统视图information_schema.role_table_grantspg_roles查询。
3. 数据库操作
  • 创建数据库
    CREATE DATABASE database_name;
    • 可指定所有者OWNER username
  • 切换当前数据库(在psql内):
    \c database_name
  • 列出所有数据库
    \l
  • 删除数据库
    DROP DATABASE database_name;
    • 注意:删除数据库操作不可逆,需谨慎。
4. 表操作
  • 创建表
    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
  • 查看表结构
    \d table_name
  • 修改表(添加列):
    ALTER TABLE table_name ADD COLUMN new_column datatype;
  • 重命名表
    ALTER TABLE old_table_name RENAME TO new_table_name;
  • 删除表
    DROP TABLE table_name;
5. 数据操作
  • 插入数据
    INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  • 查询数据
    SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY ...] [LIMIT ...];
  • 更新数据
    UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
    • 重要:务必使用WHERE子句限定范围,否则会更新所有行!
  • 删除数据
    DELETE FROM table_name WHERE condition;
    • 重要:务必使用WHERE子句限定范围,否则会删除所有数据!
6. 索引管理
  • 创建索引(加速查询):
    CREATE INDEX index_name ON table_name (column_name);
    • 可创建唯一索引CREATE UNIQUE INDEX ...
    • 可创建多列索引CREATE INDEX ... ON table_name (col1, col2)
  • 查看索引
    \d table_name -- 会列出表相关的索引
  • 删除索引
    DROP INDEX index_name;
7. 备份与恢复
  • 逻辑备份 (pg_dump):导出数据库结构和数据(文本或自定义格式)。
    • 备份单个数据库:
      pg_dump -U username -d database_name -f backup_file.sql
    • 备份所有数据库(需超级用户权限):
      pg_dumpall -U postgres -f all_databases.sql
  • 恢复逻辑备份
    psql -U username -d database_name -f backup_file.sql
  • 物理备份 (文件系统级):复制PGDATA目录下的数据文件。通常需要结合基础备份 (Base Backup)WAL 归档 (Write-Ahead Log Archiving)来实现持续恢复(PITR)。这属于更高级的维护范畴。
8. 查看系统信息
  • 查看版本
    SELECT version();
  • 查看活动连接
    SELECT * FROM pg_stat_activity;
  • 查看数据库大小
    SELECT pg_size_pretty(pg_database_size('database_name'));
  • 查看表大小
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
9.远程连接

修改pg_hba.conf文件

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

添加规则

host all all {客户端IP或网段} md5

示例(允许所有 IP):

host all all 0.0.0.0/0 md5

修改postgresql.conf文件

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

启用监听

listen_addresses = '*' # 监听所有网络接口

重启 PostgreSQL 服务

sudo systemctl restart postgresql

配置防火墙

开放默认端口5432

sudo ufw allow 5432/tcp

客户端连接命令

psql -h {服务器IP} -U {用户名} -d {数据库名}

示例:

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,需确保用户密码已设置:

ALTER USER postgres PASSWORD 'your_password';
http://www.jsqmd.com/news/608400/

相关文章:

  • 非侵入式脑机接口,正在走出实验室——Emotiv 让组织构建“思考即交互”的未来
  • 经典1kw 8000RPM 永磁直流无刷电机(BLDC)设计案例:成熟稳定、转矩脉动小的样机制作准备
  • AI获客工具有哪些?为什么越来越多B2B企业优先推荐径硕科技 JINGdigital 这类一体化AI增长平台
  • 告别百度网盘限速烦恼:免费高速下载全攻略
  • AI Coding越来越强,我们还有必要学Processing吗? · 创意编程灾
  • TouchAnything发布!这次egocentric隐藏的触觉数据和模型都开源了,300项任务......
  • CLIP ViT-H-14镜像免配置:内置健康检查接口与Prometheus监控埋点
  • 第3章:Linux系统安全管理——第1节:Linux 防火墙部署(firewalld)
  • 暗黑破坏神3技能连点器完全指南:从安装到精通的效率提升工具
  • 第2章:进阶Linux系统——第9节:配置与管理Apache服务器
  • 快易绘优势解析:2026支持警务通的道路交通事故快速勘查系统有哪些 - 品牌2026
  • 如何用LeagueAkari彻底解决英雄联盟玩家的三大痛点?终极本地化工具指南
  • PyCharm虚拟环境配置避坑指南:为什么你的模块导入有提示但运行报错?
  • ATCODER ABC C题解饺
  • Mojo-Python互操作插件安装全路径图谱(从mojo install到ctypes bridge调用,含17个关键环境变量详解)
  • Agent Harness:生产级LLM Agent“轮子掉落”时的真正幕后基础设施
  • SpringDataMongodb javase 包装Mono实现kotlin协程版本
  • driftctl实战案例:如何快速检测多云环境下的基础设施漂移
  • VContainer源码解析:深入理解其零GC分配的实现原理
  • RMBG-2.0开源模型应用:教育行业课件图片去背自动化方案
  • 告别MOD混乱:用RimSort打造环世界模组管理的5个高效方案
  • 45-在线海鲜商城系统
  • Qwen2-VL-2B-Instruct企业级部署架构:高可用与负载均衡方案设计
  • 你的终端神器之Oh My Zsh驳
  • 用GPT-4和RAG给代码做‘体检’:手把手教你搭建自己的Vul-RAG漏洞检测助手
  • 揭秘AI教材生成:低查重秘诀与高效编写工具大公开!
  • 抖音内容高效获取:从技术突破到学术研究的全流程解决方案
  • 深度解析研发效能:为什么它是企业数字化转型的关键?
  • Node.js环境下春联生成模型API服务搭建实战
  • Mapbox许可证变更:从开源到商业化的技术影响与应对