一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)

引言

PostgreSQL 作为一款功能强大、开源的关系型数据库管理系统(RDBMS),以其高扩展性、SQL 标准兼容性以及丰富的功能特性,成为企业级应用的首选数据库之一。无论是开发、运维还是数据分析,掌握 PostgreSQL 的核心指令是高效工作的关键。本文将从基础到高级,全面梳理 PostgreSQL 的常用指令,并结合实战场景与创新技巧,帮助读者快速掌握 PostgreSQL 的精髓。


一、数据库与用户管理

1.1 数据库操作

创建数据库
CREATE DATABASE mydb WITH OWNER = myuser ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE = template0;
  • OWNER:指定数据库所有者。
  • ENCODING:设置字符编码。
  • TEMPLATE:基于模板创建数据库(template0为纯净模板)。
删除数据库
DROP DATABASE IF EXISTS mydb;
  • IF EXISTS:避免数据库不存在时报错。
切换数据库
\c mydb
  • psql 命令行中快速切换数据库。

1.2 用户与权限管理

创建用户
CREATE USER myuser WITH PASSWORD 'mypassword';
  • 创建用户并设置密码。
修改用户密码
ALTER USER myuser WITH PASSWORD 'newpassword';
授予权限
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
  • 授予用户对数据库的所有权限。
撤销权限
REVOKE ALL PRIVILEGES ON DATABASE mydb FROM myuser;
删除用户
DROP USER IF EXISTS myuser;

二、表与数据操作

2.1 表操作

创建表
CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL,salary NUMERIC(10, 2),hire_date DATE DEFAULT CURRENT_DATE
);
  • SERIAL:自增主键。
  • NOT NULL:字段不允许为空。
  • DEFAULT:设置默认值。
修改表结构
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
ALTER TABLE employees DROP COLUMN department;
ALTER TABLE employees RENAME COLUMN salary TO annual_salary;
删除表
DROP TABLE IF EXISTS employees;

2.2 数据操作

插入数据
INSERT INTO employees (name, salary, hire_date) VALUES ('Alice', 75000.00, '2023-01-15');
更新数据
UPDATE employees SET salary = 80000.00 WHERE name = 'Alice';
删除数据
DELETE FROM employees WHERE id = 1;
查询数据
SELECT * FROM employees WHERE salary > 50000 ORDER BY hire_date DESC;

三、索引与性能优化

3.1 创建索引

单列索引
CREATE INDEX idx_employees_name ON employees (name);
多列索引
CREATE INDEX idx_employees_name_salary ON employees (name, salary);
唯一索引
CREATE UNIQUE INDEX idx_employees_email ON employees (email);

3.2 删除索引

DROP INDEX IF EXISTS idx_employees_name;

3.3 查询性能分析

使用 EXPLAIN 分析查询计划:

EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 50000;
  • EXPLAIN:显示查询计划。
  • ANALYZE:执行查询并返回实际执行时间。

四、高级查询与数据处理

4.1 聚合函数

SELECT department, AVG(salary) AS avg_salary, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
  • AVG:计算平均值。
  • COUNT:统计行数。
  • HAVING:对聚合结果进行过滤。

4.2 窗口函数

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;
  • RANK():计算排名。
  • OVER:定义窗口范围。

4.3 子查询

SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

4.4 联合查询

SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

五、事务与并发控制

5.1 事务管理

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
  • BEGIN:开始事务。
  • COMMIT:提交事务。
  • ROLLBACK:回滚事务。

5.2 锁机制

SELECT * FROM employees WHERE id = 1 FOR UPDATE;
  • FOR UPDATE:对查询结果加排他锁。

六、备份与恢复

6.1 逻辑备份

使用 pg_dump 备份数据库:

pg_dump -U myuser -d mydb -f mydb_backup.sql

6.2 逻辑恢复

psql -U myuser -d mydb -f mydb_backup.sql

6.3 物理备份

使用 pg_basebackup 进行全量备份:

pg_basebackup -U myuser -D /backup/mydb -Ft -Xs -P

七、扩展与插件

7.1 安装扩展

CREATE EXTENSION postgis;

7.2 常用扩展

  • postgis:地理信息系统支持。
  • pg_stat_statements:SQL 性能监控。
  • uuid-ossp:生成 UUID。

八、创新技巧与实战场景

8.1 JSONB 数据处理

PostgreSQL 支持 JSONB 数据类型,适用于半结构化数据存储:

CREATE TABLE products (id SERIAL PRIMARY KEY,details JSONB
);INSERT INTO products (details) VALUES ('{"name": "Laptop", "price": 1200, "tags": ["electronics", "portable"]}');SELECT details->>'name' AS product_name
FROM products
WHERE details @> '{"tags": ["electronics"]}';

8.2 全文搜索

使用 tsvectortsquery 实现全文搜索:

SELECT title, content
FROM articles
WHERE to_tsvector('english', content) @@ to_tsquery('english', 'PostgreSQL & performance');

8.3 分区表

对大表进行分区,提升查询性能:

CREATE TABLE sales (id SERIAL PRIMARY KEY,sale_date DATE,amount NUMERIC(10, 2)
) PARTITION BY RANGE (sale_date);CREATE TABLE sales_2023 PARTITION OF salesFOR VALUES FROM ('2023-01-01') TO ('2024-01-01');

结语

PostgreSQL 的强大功能使其成为现代数据管理的利器。通过本文的指令梳理与实战技巧,读者可以快速掌握 PostgreSQL 的核心操作,并在实际工作中灵活运用。无论是基础的数据管理,还是高级的性能优化与扩展功能,PostgreSQL 都能满足多样化的需求。未来,随着 PostgreSQL 生态的不断发展,其应用场景将更加广泛,成为数据驱动型企业的核心基础设施。

延伸阅读

  • PostgreSQL 官方文档:https://www.postgresql.org/docs/
  • PostgreSQL 性能优化指南
  • 深入理解 PostgreSQL 的事务与并发控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastadmin后台管理员日志指定方法不记录

做的订单提醒,只要在线会把日志自动存储进去,这个又是每30s执行一次,数据库没多久就爆掉了,最终找到一个处理方法,可能不是最好的,仅供大家参考 具体位置: application/admin/model/AdminLog.php里面的$ignoreRegex方法 protected static $ignoreRegex [/^(.*)\/(selectpage…

Redis Sentinel(哨兵模式)高可用性解决方案

一、概述 Redis Sentinel(哨兵模式)是Redis的高可用性(High Availability, HA)解决方案,它通过哨兵系统和Redis实例的协同工作,确保了Redis服务的高可用性和数据的持久性。哨兵系统由一个或多个哨兵进程组…

密码学(Public-Key Cryptography and Discrete Logarithms)

Public-Key Cryptography and Discrete Logarithms Discrete Logarithm 核心概念:离散对数是密码学中一个重要的数学问题,特别是在有限域和循环群中。它基于指数运算在某些群中是单向函数这一特性。也就是说,给定一个群 G G G和一个生成元 …

tcp 通信在wifi 下会出现内容错误吗?

TCP通信在WiFi下可能会出现内容错误。TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在WiFi环境下,由于信号干扰、信号衰减、多径传播等因素,可能会造成数据…

JVM OOM问题如何排查和解决

在 Java 开发中,JVM OOM(OutOfMemoryError)问题通常是指程序运行时,JVM 无法为对象分配足够的内存空间,导致发生内存溢出的错误。这个问题往往和内存的配置、内存泄漏、或者资源过度使用等因素有关。 1. OOM 错误类型…

深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发

音频编解码器(Audio CODEC)是音频处理系统中的核心组件,负责 模拟信号与数字信号的相互转换,广泛应用于 智能音箱、嵌入式系统、消费电子产品 等设备。本篇文章将从 硬件结构、接口解析、驱动开发 和 软件配置 等方面,…

【QGIS_Python】在QGIS的Python控制台生成SHP格式点数据并显示标注

参考文章: 「GIS教程」使用DeepSeek辅助QGIS快速制图 | 麻辣GIS 示例代码说明:使用参考文章中的省会城市坐标点,左侧增加一列城市序号code, 图层标注显示 code 城市名称,同时在指定路径下生成对应SHP格式点数据。 import os fr…

deepSpeed多机多卡训练服务器之间,和服务器内两个GPU是怎么通信

DeepSpeed 在多机多卡训练时,主要依赖 NCCL 和 PyTorch Distributed 进行通信。具体来说,分为服务器之间和服务器内两种情况: 1. 服务器之间的通信(跨节点通信) DeepSpeed 采用 NCCL(NVIDIA Collective Communications Library)作为主要的通信后端,结合 PyTorch Distr…

k8s-coredns-CrashLoopBackOff 工作不正常

本文作者: slience_me 问题描述 # 问题描述 # rootk8s-node1:/home/slienceme# kubectl get pods --all-namespaces # NAMESPACE NAME READY STATUS RESTARTS AGE # kube-flannel kube-flannel-ds-66bcs …

新能源电站系统建设提速!麒麟信安操作系统驱动光伏风电双领域安全升级

在全球能源结构加速向清洁能源转型的背景下,新能源电站建设正如火如荼地展开,麒麟信安操作系统为光伏与风电领域提供了稳定可靠的底座支持,目前已在中电乾阳光伏、辽宁铁岭风电场、清河光伏、鑫田茨沟风电场、连山风电场等新能源场站落地应用…

Oracle 19c 子分区表索引测试

一、建表语句放在最后,方便查看 二、创建各类索引 --创建本地的主键约束,但必须加上分区键、子分区键MT_O_CODE,M_YMD alter table MS_DMG.A_RED drop constraint MGR_PK_AREAD ; alter table MS_DMG.A_RED add constraint MGR_PK_AREAD primary key …

Linux Vim 寄存器 | 从基础分类到高级应用

注:本文为 “vim 寄存器” 相关文章合辑。 英文引文,机翻未校。 中文引文,略作重排。 未整理去重,如有内容异常,请看原文。 Registers 寄存器 Learning Vim registers is like learning algebra for the first ti…

【Java/数据结构】队列(Quque)

本博客将介绍队列的相关知识,包括基于数组的普通队列,基于链表的普通队列,基于数组的双端队列,基于链表的双端队列,但不包括优先级队列(PriorityQueue),此数据结构将单独发一篇博客&…

[数据结构]排序之 归并排序(有详细的递归图解)

一、非递归 基本思想: 归并排序( MERGE-SORT )是建立在归并操作上的一种有效的排序算法 , 该算法是采用分治法( Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列&#x…

docker安装向量数据库Milvus及可视化工具 Attu

前置条件 1.安装了docker 2.服务器网络正常,可以连接到容器下载地址 3.服务器磁盘空间正常,docker磁盘占用过大,请参考docker容量占用过大解决办法 一、下载yml文件 可在文章资源下载或者自行下载:下载yml 下载这个单机版本的…

科技云报到:AI Agent打了个响指,商业齿轮加速转动

科技云报到原创。 3月16日,百度旗下文心大模型4.5和文心大模型X1正式发布。目前,两款模型已在文心一言官网上线,免费向用户开放。 同时,文心大模型4.5已上线百度智能云千帆大模型平台,企业用户和开发者登录即可调用AP…

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面: ‌边框和背景‌: ‌border‌:可以设置图片的边框样式、宽度和颜色。例如,img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框,颜色为灰色…

EasyExcel--导入和导出Excel的方法

原文网址:EasyExcel--导入和导出Excel的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍SpringBoot整合EasyExcel导入和导出Excel的方法。 使用 Excel导入 实体类 Data public class OrderImportBO {ExcelProperty("订单号")NotBlank(message "…

金融级安全加速:群联SD-WAN如何兼顾防御与低延迟?

一、SD-WAN的核心价值 1. 传统回源痛点 暴露风险:公网回源可能泄露源站IP,易遭针对性攻击。延迟抖动:跨国业务因网络拥堵导致延迟波动(如金融交易超时)。 2. 群联方案优势 加密专线:通过IPSec/SSL VPN建…

Apache Tomcat漏洞公开发布仅30小时后即遭利用

近日,Apache Tomcat曝出一项安全漏洞,在公开发布概念验证(PoC)仅30小时后,该漏洞即遭到攻击者利用。这一漏洞编号为CVE-2025-24813,主要影响以下版本: 1. Apache Tomcat 11.0.0-M1 至 11.0.2 …