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

Postgresql日常使用

**Postgresql日常使用

一、基础操作指南

  1. 安装与配置

    • PostgreSQL 官网安装指南
  2. 连接数据库

    • 使用 psql 命令行工具
    • 常用连接参数(用户名、密码、主机、端口)
  3. 数据库管理

    • 创建 / 删除数据库
    • 切换数据库(\c 命令)
  4. 表操作

    • 创建 / 修改 / 删除表
    • 定义字段类型、约束(主键、外键、唯一键)

二、SQL 操作示例

一、数据库连接

命令行语法
psql -U username -d database_name -h host -p port
  • -U:U是user的缩写,用于指定连接数据库的用户名,例如postgres是 PostgreSQL 默认的超级用户。

  • -d:d代表database,用来指定要连接的具体数据库名称。

  • -h:h表示host,用于指定数据库服务器的主机地址,localhost表示本地主机,若数据库部署在其他服务器,需填写对应 IP 地址或域名。

  • -p:p是port的缩写,指定数据库服务器的端口号,PostgreSQL 默认端口为5432 ,若修改过端口,则需填写实际端口。

示例
psql -U admin -d mydb

此命令表示以用户admin的身份连接到名为mydb的数据库,由于未指定-h和-p参数,默认连接本地主机的5432端口。连接成功后,可在命令行输入 SQL 语句操作数据库,输入\q即可退出连接。

二、用户与权限管理

1. 创建用户
CREATE USER new_user WITH PASSWORD 'password';

这条 SQL 语句用于在 PostgreSQL 中创建新用户。CREATE USER是创建用户的关键字,new_user是自定义的新用户名,WITH PASSWORD用于设置用户的登录密码,'password’为具体密码,实际使用时应设置强密码以保证安全性。

2. 赋予权限
  • 授予表查询权限
GRANT SELECT ON table_name TO new_user;

GRANT用于授予权限,SELECT表示要授予的权限类型,即查询权限;ON table_name指定权限作用的对象为名为table_name的表;TO new_user表示将该权限授予new_user用户。

  • 授予数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE database_name TO new_user;

ALL PRIVILEGES表示所有权限,包括创建、删除、修改等操作;ON DATABASE database_name指定权限作用于名为database_name的数据库;TO new_user将数据库的所有权限授予new_user,此操作需谨慎,避免用户误操作导致数据问题。

3. 回收权限
REVOKE SELECT ON table_name FROM new_user;

REVOKE用于回收权限,SELECT指定要回收的查询权限;ON table_name表明权限作用的表;FROM new_user表示从new_user用户处回收对table_name表的查询权限。

三、数据库与表操作

1. 创建数据库
CREATE DATABASE my_databaseWITH OWNER = postgresENCODING = 'UTF8'LC_COLLATE = 'C'LC_CTYPE = 'C'TABLESPACE = pg_defaultCONNECTION LIMIT = -1;
  • CREATE DATABASE my_database:创建名为my_database的数据库。

  • OWNER = postgres:指定数据库的所有者为postgres用户。

  • ENCODING = ‘UTF8’:设置数据库的编码格式为 UTF-8,支持多种语言字符。

  • LC_COLLATE = 'C’和LC_CTYPE = ‘C’:分别设置数据库的排序规则和字符分类,C是默认的简单排序和字符分类方式。

  • TABLESPACE = pg_default:指定数据库使用的表空间为默认表空间pg_default。

  • CONNECTION LIMIT = -1:设置数据库的最大连接数,-1表示不限制连接数 。

2. 创建表
CREATE TABLE employees (id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100) UNIQUE,hire_date DATE
);
  • CREATE TABLE employees:创建名为employees的表。

  • id SERIAL PRIMARY KEY:SERIAL是一种自增数据类型,用于生成唯一的标识符,PRIMARY KEY指定该列为主键,确保数据的唯一性和完整性。

  • first_name VARCHAR(50)和last_name VARCHAR(50):创建两个字段,用于存储员工的名和姓,VARCHAR(50)表示可变长度字符串,最大长度为 50 个字符。

  • email VARCHAR(100) UNIQUE:创建存储员工邮箱的字段,UNIQUE约束确保该列的值在表中唯一,不允许重复。

  • hire_date DATE:创建存储员工入职日期的字段,数据类型为DATE,只存储日期信息。

3. 修改表结构
  • 添加新列
ALTER TABLE employees ADD COLUMN phone_number VARCHAR(20);

ALTER TABLE employees指定要修改的表为employees;ADD COLUMN表示添加新列;phone_number VARCHAR(20)定义新列名为phone_number,数据类型为可变长度字符串,最大长度 20 个字符。

  • 修改列的数据类型
ALTER TABLE employees ALTER COLUMN phone_number TYPE VARCHAR(25);

ALTER TABLE employees指定目标表;ALTER COLUMN phone_number指定要修改的列;TYPE VARCHAR(25)将phone_number列的数据类型修改为最大长度 25 的可变长度字符串。

  • 删除列
ALTER TABLE employees DROP COLUMN phone_number;

ALTER TABLE employees指定表;DROP COLUMN phone_number删除employees表中的phone_number列。

四、数据操作

1. 插入数据
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('John', 'Doe', 'johndoe@example.com', '2023-01-01');

INSERT INTO employees指定要插入数据的表为employees;(first_name, last_name, email, hire_date)列出要插入数据的列;VALUES后面括号内对应的值,按列顺序依次插入到表中。

2. 查询数据
  • 使用 JOIN 查询关联表数据
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

SELECT e.first_name, e.last_name, d.department_name指定要查询的列,分别从employees表(别名e)和departments表(别名d)中选取。

FROM employees e指定主表为employees,并为其取别名e。

JOIN departments d ON e.department_id = d.id通过department_id和id列的关联关系,将employees表和departments表进行连接,以便获取关联数据。

  • 使用聚合函数
SELECT COUNT(*), AVG(salary)
FROM employees;

COUNT(*)统计employees表中的记录总数;AVG(salary)计算employees表中salary列的平均值。聚合函数常用于统计和分析数据。

3. 更新数据
UPDATE employees
SET email = 'newemail@example.com'
WHERE id = 1;

UPDATE employees指定要更新数据的表为employees;SET email = 'newemail@example.com’设置要更新的列和新值,将email列的值更新为newemail@example.com;WHERE id = 1是筛选条件,仅对id等于 1 的记录进行更新操作。

4. 删除数据
DELETE FROM employees WHERE id = 1;

DELETE FROM employees指定从employees表中删除数据;WHERE id = 1为删除条件,仅删除id等于 1 的记录,若不添加WHERE条件,将删除表中所有数据。

五、索引优化

1. 创建索引
  • 创建 B-tree 索引
CREATE INDEX idx_employees_email ON employees (email);

CREATE INDEX用于创建索引,idx_employees_email是自定义的索引名称;ON employees指定索引作用的表为employees;(email)表示基于email列创建索引,B-tree 索引适用于等值查询和范围查询,可提升查询性能。

  • 创建 GiST 索引
CREATE INDEX idx_employees_fulltext ON employees USING GIST (to_tsvector('english', first_name ||'' || last_name));

CREATE INDEX idx_employees_fulltext创建名为idx_employees_fulltext的索引;ON employees指定作用表;USING GIST表示使用 GiST 索引类型;to_tsvector(‘english’, first_name ||‘’ || last_name)将first_name和last_name列合并后转换为全文搜索向量,GiST 索引常用于全文搜索等复杂查询场景。

2. 查看索引使用情况
SELECT relname, idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan;

pg_stat_user_indexes是 PostgreSQL 系统提供的视图,用于存储用户创建索引的相关统计信息。SELECT relname, idx_scan从该视图中选取索引名称(relname)和索引扫描次数(idx_scan)两列数据;ORDER BY idx_scan按索引扫描次数对结果进行排序,方便查看哪些索引使用频繁,哪些索引可能未被有效利用。

六、备份与恢复

1. 全库备份
pg_dump -U username -d database_name -f full_backup.sql

pg_dump是 PostgreSQL 的备份工具。-U username指定执行备份操作的用户名;-d database_name指定要备份的数据库;-f full_backup.sql指定备份文件的名称和路径,将数据库备份到名为full_backup.sql的文件中。

2. 增量备份
  • 配置归档模式
wal_level = replica
archive_mode = on
archive_command = 'test! -f /path/to/archive/%f && cp %p /path/to/archive/%f'

wal_level = replica设置 WAL(Write-Ahead Logging,预写式日志)级别为replica,支持复制和归档。archive_mode = on开启归档模式,使事务日志可以被归档。archive_command定义归档命令,test! -f /path/to/archive/%f && cp %p /path/to/archive/%f表示如果归档目录下不存在同名文件,则将事务日志文件复制到归档目录中,%f代表日志文件名,%p代表日志文件路径。

  • 执行基础备份
pg_basebackup -U username -h host -D /backup/directory -P

pg_basebackup用于创建基础备份。-U username指定用户名;-h host指定数据库主机地址;-D /backup/directory指定备份文件存放的目录;-P显示备份进度。

3. 恢复数据
  • 全库恢复
pg_restore -U username -d target_database backup_file.sql

pg_restore是恢复工具。-U username指定恢复操作的用户名;-d target_database指定要恢复到的目标数据库;backup_file.sql是之前备份的文件,将备份数据恢复到目标数据库中。

  • 基于基础备份和归档日志恢复到指定时间点
pg_basebackup -U username -h host -D /restore/directory -Xs -P

-Xs参数表示在基础备份时包含 WAL 归档文件,以便后续基于归档日志进行时间点恢复;-D /restore/directory指定恢复文件存放目录。

restore_command = 'cp /path/to/archive/%f %p'
recovery_target_time = '2024-01-01 12:00:00'

在recovery.conf文件中配置恢复参数,restore_command定义从归档目录恢复事务日志文件的命令;recovery_target_time指定恢复的目标时间点,数据库将恢复到该时间点的状态。

七、日常维护

1. 定期清理事务日志
VACUUM ANALYZE;

VACUUM命令用于回收已删除数据占用的磁盘空间,并更新数据库的统计信息。ANALYZE子句会收集表和索引的统计信息,帮助查询优化器生成更高效的查询计划。执行该命令可防止事务日志文件过大,提升数据库性能。

2. 监控数据库性能
SELECT * FROM pg_stat_activity;

pg_stat_activity是系统视图,包含当前数据库中所有活动进程的信息,如连接用户、执行的 SQL 语句、查询开始时间等。通过查询该视图,可以实时监控数据库的运行状态,及时发现长时间运行的查询、阻塞问题等性能瓶颈。

3. 更新数据库版本

关注 PostgreSQL 官方发布的版本更新,新版本通常会修复已知的安全漏洞、性能问题,并添加新功能。按照官方提供的升级指南进行操作,确保数据库安全、高效运行 。

以上对 PostgreSQL 日常使用中各类代码的详细解释,希望能帮助你深入理解每个操作背后的逻辑和作用。

这份解释涵盖了 PostgreSQL 日常操作代码的核心要点。若你对某部分代码还有疑问,或想了解更多相关拓展知识,欢迎随时与我交流。

相关文章:

  • Redis缓存三大难题:穿透、击穿、雪崩
  • FastDFS分布式储存
  • 【Linux】regmap子系统
  • WEB JWT
  • Java程序员如何设计一个高并发系统?
  • Go 语言安装指南:并解决 `url.JoinPath` 及 `Exec format error` 问题
  • 全栈监控系统架构
  • 大白话解释蓝牙的RPC机制
  • LeetCode 2917.找出数组中的K-or值
  • Linux612 chroot_list开放;FTP服务ftp:get put,指定上传路径报错553;ftp查看文件夹权限
  • Vulkan学习笔记4—图形管线基础
  • ubuntu20.04 安装Mujoco 及 Isaac Gym 仿真器
  • 紫光展锐完成优化升级,支持Android 16,以科技创新共赴智能体验新篇章
  • 常见的测试工具及分类
  • 系统功耗管理
  • 从零搭建智能家居:香橙派+HomeAssistant实战指南
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 6】【Properties介绍】
  • Springboot仿抖音app开发之消息业务模块后端复盘及相关业务知识总结
  • php反序列化漏洞学习
  • [安卓按键精灵辅助工具]一些安卓端可以用的雷电模拟器adb命令
  • 如何让搜索引擎不收录网站/网站超级外链
  • 网站建设的过程/绍兴seo计费管理
  • 如何查询注册过的网站/免费发布软文广告推广平台
  • dede网站改成自适应/渠道营销推广方案
  • 天河建设网站设计/lol今日赛事直播
  • php动态网站开发课后题答案/网络运营seo是什么