PostgreSQL初体验

news2025/5/21 7:13:55

目录

一、PostgreSQL 核心概述

(一)定义与定位

(二)核心特性与优势

(三)应用场景

二、PostgreSQL 安装实战(基于 OpenEuler 24)

(一)编译安装(以 16.3 版本为例)

1. 环境准备

2. 下载与解压源码

3. 配置编译参数

4. 编译与安装

5. 创建用户与数据目录

6. 配置环境变量

7. 初始化数据库集群

8. 启动与停止服务

9. 登录数据库

(二)DNF 安装(快速部署 15.12 版本)

三、PostgreSQL 逻辑与物理架构解析

(一)逻辑架构

1. 层级结构

2. 核心概念

3. 对象标识符(OID)

(二)物理架构

1. 目录结构

2. 关键文件解析

四、PostgreSQL 核心功能与操作

(一)用户与权限管理

1. 创建用户与角色

2. 权限控制

3. 角色继承

(二)数据类型与表操作

1. 常用数据类型

2. 创建表

3. 索引优化

(三)事务与并发控制

1. 显式事务控制

2. 保存点(Savepoint)

3. 事务隔离级别

五、PostgreSQL 高级特性与扩展

(一)分区表(Partitioning)

1. 范围分区(按时间范围分区)

2. 列表分区(按地区列表分区)

3. 哈希分区(按用户 ID 哈希分区)

(二)扩展应用(Extensions)

1. PostGIS(地理信息处理)

2. TimescaleDB(时间序列数据)

3. Citus(分布式查询)

(三)备份与恢复

1. 逻辑备份(pg_dump)

2. 物理备份(pg_basebackup)

3. 恢复备份

(四)性能优化实战

1. 配置参数调优

2. 查询优化

3. 自动真空(VACUUM)调优

六、高可用性与复制

(一)主从复制(流复制)

1. 主库配置(postgresql.conf)

2. 从库初始化(pg_basebackup)

3. 从库配置(postgresql.conf)

4. 启动从库

(二)逻辑复制

七、安全最佳实践

(一)认证与加密

(二)权限最小化原则

八、日常管理命令速查表


一、PostgreSQL 核心概述

(一)定义与定位

PostgreSQL 是一款开源的对象关系型数据库管理系统(ORDBMS),起源于加州大学伯克利分校,继承了 Ingres 项目的技术精髓。它不仅支持传统的关系型数据模型,还引入了对象特性(如自定义数据类型、函数、操作符等),成为现代数据库领域中功能最全面的开源解决方案之一。

(二)核心特性与优势

特性分类具体内容
开源与自由遵循 PostgreSQL 许可证,允许用户自由使用、修改和分发,吸引全球开发者贡献插件与解决方案(如 PostGIS 地理扩展、TimescaleDB 时间序列扩展)。
标准符合性高度兼容 SQL 标准,支持窗口函数、公共表表达式(CTE)、子查询等高级语法,提升 SQL 代码的可读性与执行效率。
数据类型丰富内置类型包括:
- 基础类型:整数、浮点数、字符串
- 复杂类型:数组、枚举、范围类型、JSON、地理空间类型(依赖 PostGIS)
- 时间类型:精确到纳秒的时间戳
事务与并发控制采用 ** 多版本并发控制(MVCC)** 机制,确保高并发下的数据一致性;支持嵌套事务、保存点(Savepoint),满足复杂业务逻辑的事务管理需求。
扩展性支持通过插件(Extension)扩展功能,例如:
- 自定义数据类型(如网络地址类型)
- 索引方法(如 GIN 索引用于全文搜索)
- 过程语言(PL/pgSQL、PL/Python 等)
安全性提供细粒度权限控制(基于角色的访问控制,RBAC)、SSL 加密传输、审计日志(log_statement),符合 GDPR 等数据合规要求。
高性能优化手段包括:
- 智能查询优化器(基于成本的优化,CBO)
- 并行查询(Parallel Query)
- 分区表(Range/List/Hash 分区)
- 索引优化(B-tree、Hash、GIST 等索引类型)
高可用性支持主从复制(流复制、逻辑复制)、自动故障转移(需配合 Patroni 等工具),通过 PGDG 生态实现企业级容灾方案。
成本效益开源免费,无需支付授权费用;社区提供丰富的文档、教程与技术支持,降低企业技术选型门槛。

(三)应用场景

  1. 企业级应用:ERP、CRM 系统,如海尔集团使用 PostgreSQL 支撑供应链管理系统,处理高并发事务与复杂业务逻辑。
  2. 数据分析与数据仓库:结合 Citus 扩展实现分布式查询,支持 TB 级数据实时分析,典型案例包括 Airbnb 的实时数据看板。
  3. 地理信息系统(GIS):通过 PostGIS 扩展存储与分析地理空间数据,被 OpenStreetMap 等项目用于地图数据管理。
  4. 物联网(IoT):利用 TimescaleDB 扩展存储时间序列数据,适配传感器数据高频写入场景,如智能电网监控系统。
  5. 金融与交易系统:满足 ACID 事务特性与高可用性要求,被印度 ICICI 银行用于核心交易系统。

二、PostgreSQL 安装实战(基于 OpenEuler 24)

(一)编译安装(以 16.3 版本为例)

1. 环境准备
# 安装编译依赖(GCC、ICU 库、Readline 库等)
[root@localhost ~]# yum -y install gcc gcc-* make libicu libicu-devel readline-devel zlib zlib-devel
2. 下载与解压源码
# 下载 PostgreSQL 16.3 源码包(需提前安装 wget/curl)
[root@localhost ~]# wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
# 解压源码
[root@localhost ~]# tar zxvf postgresql-16.3.tar.gz
[root@localhost ~]# cd postgresql-16.3
3. 配置编译参数
# --prefix 指定安装目录,--with-openssl 启用 SSL 支持
[root@localhost postgresql-16.3]# ./configure --prefix=/usr/local/pgsql --with-openssl --with-libxml --with-libxslt
4. 编译与安装
# 编译(建议多核环境使用 -j 参数加速,如 -j4)
[root@localhost postgresql-16.3]# make && make install
5. 创建用户与数据目录
# 创建数据库专用用户(避免使用 root 运行服务)
[root@localhost ~]# adduser postgres
# 创建数据存储目录
[root@localhost ~]# mkdir -p /usr/local/pgsql/data
# 赋予用户权限
[root@localhost ~]# chown -R postgres:postgres /usr/local/pgsql/data
6. 配置环境变量
# 编辑系统环境变量文件
[root@localhost ~]# vi /etc/profile
# 添加以下内容
export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
# 使配置生效
[root@localhost ~]# source /etc/profile
7. 初始化数据库集群
# 切换至 postgres 用户
[root@localhost ~]# su - postgres
# 初始化集群(-D 指定数据目录,-W 启用密码认证)
[postgres@localhost ~]$ initdb -D /usr/local/pgsql/data -U postgres -W
8. 启动与停止服务
# 启动服务(-l 指定日志文件)
[postgres@localhost ~]$ pg_ctl -D /usr/local/pgsql/data -l postgresql.log start
# 停止服务(-m 参数指定停止模式:smart/fast/immediate)
[postgres@localhost ~]$ pg_ctl -D /usr/local/pgsql/data -m fast stop
# 查看服务状态
[postgres@localhost ~]$ pg_ctl -D /usr/local/pgsql/data status
9. 登录数据库
# 使用 psql 客户端登录(默认连接 postgres 数据库)
[postgres@localhost ~]$ psql
psql (16.3)
Type "help" for help.

postgres=# -- 查看数据库列表
postgres=# \l
# 退出客户端
postgres=# \q

(二)DNF 安装(快速部署 15.12 版本)

# 安装官方 YUM 源(可选,若系统自带源版本较低)
[root@localhost ~]# rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -q --queryformat "%{VERSION}" centos-release)-$(arch)/pgdg-redhat-repo-latest.noarch.rpm
# 安装 PostgreSQL 服务器与客户端
[root@localhost ~]# dnf install -y postgresql15-server postgresql15
# 初始化数据库
[root@localhost ~]# /usr/pgsql-15/bin/postgresql-15-setup initdb
# 启动服务并设置开机自启
[root@localhost ~]# systemctl start postgresql-15
[root@localhost ~]# systemctl enable postgresql-15

三、PostgreSQL 逻辑与物理架构解析

(一)逻辑架构

1. 层级结构
PostgreSQL 实例(Instance)
├─ 数据库集群(Database Cluster)
│  ├─ 数据库(Database): postgres(默认管理库)、template0(纯净模板库)、template1(默认模板库)
│  │  ├─ 模式(Schema): public(默认模式)、自定义模式(如 sales_schema)
│  │  │  ├─ 数据库对象(表、视图、索引、函数、序列等)
│  │  ├─ 表空间(Tablespace): pg_default(默认表空间)、pg_global(系统表空间)
│  ├─ 用户(User): postgres(超级用户)、普通角色(如 app_user)
2. 核心概念
  • 数据库集群(Cluster):一个 PostgreSQL 服务实例管理的所有数据库的集合,共享系统级配置(如连接池参数)。
  • 数据库(Database):逻辑隔离的存储单元,每个数据库包含独立的模式与对象,物理上对应数据目录中的一个子目录。
  • 模式(Schema):用于隔离同一数据库内的对象(如不同用户的表),默认模式为 public,可通过 SET search_path TO schema_name; 指定搜索路径。
  • 表空间(Tablespace):逻辑存储位置,物理对应文件系统目录,用于分散数据存储路径(如将大表存储在独立磁盘)。
    -- 创建自定义表空间
    CREATE TABLESPACE my_tablespace OWNER postgres LOCATION '/data/pgsql/tablespace';
    -- 创建表时指定表空间
    CREATE TABLE large_data (id INT) TABLESPACE my_tablespace;
    
3. 对象标识符(OID)
  • 每个数据库对象(表、索引、用户等)都有唯一的 OID(32 位无符号整数)。
  • 通过系统表查询 OID:
    -- 查询表的 OID
    SELECT oid FROM pg_class WHERE relname = 'users';
    -- 通过 OID 查询表名
    SELECT relname FROM pg_class WHERE oid = 16384;
    

(二)物理架构

1. 目录结构
/usr/local/pgsql/          # 安装目录(默认由 --prefix 指定)
├─ bin/                    # 可执行文件(psql、pg_ctl、initdb 等)
├─ lib/                    # 动态库文件(PostgreSQL 核心库、插件库)
├─ share/                  # 文档、配置模板、SQL 脚本(如扩展插件的 SQL 文件)
└─ data/                   # 数据目录(由 initdb 初始化,需单独备份)
   ├─ base/                # 存储各数据库的数据文件(每个数据库对应一个子目录,如 base/16384 对应 template1 数据库)
   ├─ global/              # 存储集群级系统表(如 pg_database、pg_control)
   ├─ pg_commit_ts/        # 事务提交时间戳(9.5+ 版本)
   ├─ pg_dynshmem/         # 动态共享内存文件(9.4+ 版本)
   ├─ pg_logical/          # 逻辑复制状态数据(9.4+ 版本)
   ├─ pg_multixact/        # 多事务状态数据(处理行级共享锁)
   ├─ pg_wal/              # 预写日志(WAL)文件(10+ 版本,旧版本为 pg_xlog)
   ├─ pg_xact/             # 事务提交状态数据(10+ 版本,旧版本为 pg_clog)
   ├─ postgresql.conf      # 主配置文件(参数配置核心文件)
   └─ pg_hba.conf          # 客户端认证文件(控制用户连接权限)
2. 关键文件解析
  • postgresql.conf
    核心配置参数,常用配置项:

    listen_addresses = '*'          # 监听地址(默认 localhost,生产环境需改为 0.0.0.0)
    port = 5432                     # 端口号
    max_connections = 100           # 最大连接数
    shared_buffers = 128MB          # 共享缓冲区(建议设置为物理内存的 25%)
    work_mem = 4MB                  # 单个查询使用的工作内存
    wal_level = replica             # WAL 日志级别(minimal/replica/full)
    
  • pg_hba.conf
    定义客户端连接认证规则,格式:

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    all             all             127.0.0.1/32            scram-sha-256  # 本地连接使用 SCRAM-SHA-256 认证
    host    all             all             ::1/128                 scram-sha-256  # IPv6 本地连接
    host    replication     replicator      192.168.1.0/24          md5           # 主从复制使用 MD5 认证
    
  • WAL 文件(pg_wal/)
    预写日志用于保障数据持久化与故障恢复,每个 WAL 段文件固定为 16MB,命名格式为 000000010000000000000001(时间线 + 日志序列号)。

四、PostgreSQL 核心功能与操作

(一)用户与权限管理

1. 创建用户与角色
-- 创建普通用户(密码加密存储)
CREATE USER app_user WITH PASSWORD 'secure_password';
-- 创建超级用户(需谨慎)
CREATE ROLE super_user WITH SUPERUSER LOGIN PASSWORD 'super_secret';
2. 权限控制
-- 授予表查询权限
GRANT SELECT ON TABLE users TO app_user;
-- 授予模式创建权限
GRANT CREATE ON SCHEMA sales TO app_user;
-- 回收权限
REVOKE INSERT ON TABLE orders FROM app_user;
3. 角色继承
-- 创建角色组
CREATE ROLE analysts;
-- 将用户加入角色组
GRANT analysts TO app_user;
-- 授予角色组权限
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO analysts;

(二)数据类型与表操作

1. 常用数据类型
分类数据类型说明
数值类型int4, int8, numeric(p,s)numeric 用于高精度计算(如金融数据)
字符串类型varchar(n), texttext 无长度限制,varchar (n) 限制最大长度
时间类型timestamp, intervaltimestamp 包含日期时间,interval 表示时间间隔(如 '1 day 2 hours')
数组类型int[], varchar(10)[]一维 / 多维数组,如 {1,2,3} 或 ARRAY[1,2,3]
JSON 类型json, jsonbjsonb 支持索引与查询优化,推荐用于存储半结构化数据
地理空间类型geography, geometry需安装 PostGIS 扩展,支持点、线、面等空间对象
2. 创建表
-- 创建用户表(含数组与 JSONB 字段)
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    emails TEXT[],             -- 邮箱数组
    metadata JSONB,            -- 扩展元数据
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3. 索引优化
-- 创建 B-tree 索引(默认类型,适用于等值查询)
CREATE INDEX idx_users_name ON users(name);
-- 创建 GIN 索引(适用于数组或 JSONB 全文搜索)
CREATE INDEX idx_users_emails ON users USING GIN(emails);
-- 创建部分索引(仅对符合条件的数据建索引)
CREATE INDEX idx_users_active ON users(id) WHERE status = 'active';

(三)事务与并发控制

1. 显式事务控制
BEGIN;                          -- 开启事务
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;                         -- 提交事务(若中间出错则自动回滚)
2. 保存点(Savepoint)
BEGIN;
INSERT INTO orders (order_date) VALUES ('2023-10-01');
SAVEPOINT sp1;                  -- 设置保存点
INSERT INTO order_items (order_id, product_id) VALUES (1, 101);
-- 回滚到保存点,保留之前的插入操作
ROLLBACK TO sp1;
COMMIT;
3. 事务隔离级别
-- 设置事务隔离级别为可重复读(默认级别)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 查看当前会话隔离级别
SELECT current_setting('transaction_isolation');

五、PostgreSQL 高级特性与扩展

(一)分区表(Partitioning)

分区表用于将大型表的数据分散到多个物理子表中,提升查询性能与管理效率。PostgreSQL 支持范围分区(Range)列表分区(List)、** 哈希分区(Hash)** 三种方式。

1. 范围分区(按时间范围分区)
-- 创建主表(声明为分区表)
CREATE TABLE sales (
    order_id INT,
    order_date DATE,
    amount NUMERIC
) PARTITION BY RANGE (order_date);

-- 创建分区函数(定义分区范围)
CREATE OR REPLACE FUNCTION sales_partition_func() RETURNS TRIGGER AS $$
BEGIN
    IF NEW.order_date < '2023-01-01' THEN
        INSERT INTO sales_2022 VALUES (NEW.*);
    ELSIF NEW.order_date < '2024-01-01' THEN
        INSERT INTO sales_2023 VALUES (NEW.*);
    ELSE
        INSERT INTO sales_future VALUES (NEW.*);
    END IF;
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- 创建分区表
CREATE TABLE sales_2022 PARTITION OF sales FOR VALUES FROM ('-infinity') TO ('2023-01-01');
CREATE TABLE sales_2023 PARTITION OF sales FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
CREATE TABLE sales_future PARTITION OF sales FOR VALUES FROM ('2024-01-01') TO ('infinity');

-- 绑定触发器(自动路由数据到对应分区)
CREATE TRIGGER sales_partition_trigger BEFORE INSERT ON sales
FOR EACH ROW EXECUTE FUNCTION sales_partition_func();
2. 列表分区(按地区列表分区)
CREATE TABLE users (
    user_id INT,
    region TEXT,
    email TEXT
) PARTITION BY LIST (region);

CREATE TABLE users_north PARTITION OF users FOR VALUES IN ('north', 'northeast');
CREATE TABLE users_south PARTITION OF users FOR VALUES IN ('south', 'southeast');
CREATE TABLE users_other PARTITION OF users FOR VALUES IN (DEFAULT);
3. 哈希分区(按用户 ID 哈希分区)
CREATE TABLE orders (
    order_id INT,
    user_id INT,
    order_time TIMESTAMP
) PARTITION BY HASH (user_id) PARTITIONS 4; -- 自动创建4个哈希分区
(二)扩展应用(Extensions)

PostgreSQL 通过 CREATE EXTENSION 命令加载扩展,以下是常用扩展示例:

1. PostGIS(地理信息处理)
-- 安装 PostGIS 扩展(需先安装系统包 postgis)
CREATE EXTENSION postgis;

-- 创建地理空间表(存储点坐标)
CREATE TABLE restaurants (
    id SERIAL,
    name TEXT,
    location GEOGRAPHY(POINT) -- 使用地理坐标系(WGS84)
);

-- 插入数据(WKT 格式:POINT(longitude latitude))
INSERT INTO restaurants (name, location) VALUES (
    'Pizza Hut', 
    ST_GeogFromText('POINT(-73.9654 40.7821)')
);

-- 查询半径5公里内的餐厅
SELECT name FROM restaurants
WHERE ST_DWithin(location, ST_GeogFromText('POINT(-73.9847 40.7589)'), 5000);
2. TimescaleDB(时间序列数据)
-- 安装 TimescaleDB 扩展
CREATE EXTENSION timescaledb;

-- 创建时间序列表(自动转换为超表)
CREATE TABLE sensor_data (
    time TIMESTAMP NOT NULL,
    device_id INT NOT NULL,
    temperature FLOAT,
    humidity FLOAT
);
SELECT create_hypertable('sensor_data', 'time'); -- 转换为超表

-- 插入数据
INSERT INTO sensor_data (time, device_id, temperature, humidity)
VALUES (NOW(), 1, 25.5, 60.0);

-- 聚合查询(按小时统计平均温度)
SELECT time_bucket('1 hour', time) AS hour, AVG(temperature)
FROM sensor_data
GROUP BY hour
ORDER BY hour;
3. Citus(分布式查询)
# 安装 Citus 扩展(需编译安装或通过包管理器获取)
[root@localhost ~]# dnf install -y postgresql-citus

-- 启用 Citus 扩展
CREATE EXTENSION citus;

-- 创建分布式表(指定分布列)
CREATE TABLE orders (
    order_id BIGINT,
    customer_id INT,
    order_total NUMERIC
);
SELECT create_distributed_table('orders', 'customer_id'); -- 按 customer_id 分布

-- 创建参考表(小表,全节点复制)
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name TEXT
);
SELECT create_reference_table('customers');
(三)备份与恢复
1. 逻辑备份(pg_dump)
# 备份单个数据库(压缩为 SQL 文件)
pg_dump -U postgres -d mydb -f mydb_backup.sql -Z 9
# 备份指定表
pg_dump -U postgres -d mydb -t users -t orders > tables_backup.sql
# 备份整个集群(包含所有数据库,需使用 pg_dumpall)
pg_dumpall -U postgres -f cluster_backup.sql
2. 物理备份(pg_basebackup)
# 全量备份(流复制模式,需开启 wal_level=replica)
pg_basebackup -U postgres -h localhost -D /backup/pg_basebackup \
--wal-method=stream --backup-mode=full --compress=zstd
3. 恢复备份
# 恢复逻辑备份
psql -U postgres -d mydb < mydb_backup.sql
# 恢复物理备份(需停止数据库服务)
systemctl stop postgresql
rm -rf /usr/local/pgsql/data/*
cp -R /backup/pg_basebackup/* /usr/local/pgsql/data/
chown -R postgres:postgres /usr/local/pgsql/data
pg_ctl -D /usr/local/pgsql/data -l logfile start
(四)性能优化实战
1. 配置参数调优
# postgresql.conf 关键参数优化(适用于 16GB 内存服务器)
max_connections = 200         # 根据应用连接数调整
shared_buffers = 4GB          # 内存的 25%
work_mem = 32MB               # 复杂查询(排序/哈希连接)的工作内存
maintenance_work_mem = 1GB    # VACUUM/REINDEX 等维护操作内存
effective_cache_size = 12GB   # 内核缓存+共享缓冲区,建议内存的 75%
wal_buffers = 128MB           # WAL 缓冲区(默认 128MB,大事务可增大)
random_page_cost = 1.1        # SSD 存储设为 1.1,HDD 设为 4.0
2. 查询优化
-- 分析查询计划(查看执行成本与索引使用情况)
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';

-- 强制使用索引(避免全表扫描)
SET enable_seqscan = OFF;
SELECT * FROM large_table WHERE id = 1234;
RESET enable_seqscan;
3. 自动真空(VACUUM)调优
# 调整真空参数(减少长事务阻塞)
autovacuum_vacuum_scale_factor = 0.02   # 当脏页比例超过 2% 时触发真空
autovacuum_vacuum_threshold = 50        # 最小脏页数
vacuum_cost_delay = 20ms                # 真空操作延迟(降低 I/O 冲击)
vacuum_cost_limit = 2000                # 真空操作最大成本

六、高可用性与复制

(一)主从复制(流复制)

1. 主库配置(postgresql.conf)
wal_level = replica          # 启用复制功能
max_wal_senders = 5          # 最大发送进程数
wal_keep_segments = 32       # 保留 WAL 段数(单位:16MB,用于故障恢复)
listen_addresses = '*'       # 监听所有 IP
2. 从库初始化(pg_basebackup)
# 在从库节点执行
pg_basebackup -U postgres -h master_ip -D /usr/local/pgsql/data \
--wal-method=stream --create-slot=slave_slot
3. 从库配置(postgresql.conf)
hot_standby = on             # 启用只读模式
primary_conninfo = 'host=master_ip port=5432 user=replica password=replica_password'
4. 启动从库
pg_ctl -D /usr/local/pgsql/data start
# 验证复制状态
psql -c "SELECT * FROM pg_stat_replication;"

(二)逻辑复制

-- 主库创建发布(Publication)
CREATE PUBLICATION my_publication FOR TABLE users, orders;

-- 从库创建订阅(Subscription)
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=master_ip port=5432 user=replica password=replica_password dbname=mydb'
PUBLICATION my_publication;

七、安全最佳实践

(一)认证与加密

  1. 使用 SCRAM-SHA-256 认证(pg_hba.conf):
    host all all 0.0.0.0/0 scram-sha-256
    
  2. 启用 SSL 加密(postgresql.conf):
    ssl = on
    ssl_cert_file = 'server.crt'
    ssl_key_file = 'server.key'
    ssl_ca_file = 'root.crt'  # 可选,客户端证书验证
    

(二)权限最小化原则

  • 避免使用超级用户执行日常操作,为应用创建专用角色。
  • 限制 PUBLIC 模式的权限:
    REVOKE ALL ON SCHEMA public FROM PUBLIC;
    GRANT USAGE ON SCHEMA public TO app_user;
    

八、日常管理命令速查表

操作类型命令示例
查看数据库列表\l
查看表结构\d users
查看当前用户SELECT current_user;
查看参数配置SHOW all;
清理无效对象VACUUM FULL ANALYZE;
查看慢查询日志tail -f /usr/local/pgsql/data/pg_log/postgresql-SLOW-*.log
监控数据库状态pg_stat_statements 扩展(需安装)或 pg_top 工具

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

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

相关文章

css使用clip-path属性切割显示可见内容

1. 需求 想要实现一个渐变的箭头Dom&#xff0c;不想使用svg、canvas去画&#xff0c;可以考虑使用css的clip-path属性切割显示内容。 2. 实现 <div class"arrow">箭头 </div>.arrow{width: 200px;height: 60px;background-image: linear-gradient(45…

新京东,正在成为一种生活方式

出品|何玺排版|叶媛 一个新京东&#xff0c;正在从“心”诞生。 2025年2月11日之前&#xff0c;如果问京东是做什么的&#xff0c;相信大多数人会回答京东是电商平台&#xff0c;卖家电数码日用百货的。现在&#xff0c;如果问京东是做什么的&#xff0c;相信大家的回答不在是…

Linux 文件(2)

文章目录 1. 文件描述符1.1 文件描述符是什么1.2 文件描述符如何分配 2 重定向2.1 输出重定向2.2 输入重定向2.3 使用dup2进行重定向 3. 文件、父子进程和进程替换 1. 文件描述符 1.1 文件描述符是什么 什么是文件描述符呢&#xff1f; 我们先来看之前所介绍的系统级别的文件…

基于Springboot + vue3实现的工商局商家管理系统

项目描述 本系统包含管理员、商家两个角色。 管理员角色&#xff1a; 用户管理&#xff1a;管理系统中所有用户的信息&#xff0c;包括添加、删除和修改用户。 许可证申请管理&#xff1a;管理商家的许可证申请&#xff0c;包括搜索、修改或删除许可证申请。 许可证审批管理…

【Java ee初阶】HTTP(2)

一、HTTP的方法 方法 说明 支持的HTTP协议版本 GET 获取资源 1.0、1.1 POST 传输实体主体 1.0、1.1 PUT 传输文件 1.0、1.1 HEAD 获得报文首部 1.0、1.1 DELETE 删除文件 1.0、1.1 OPTIONS 询问支持的方法 1.1 TRACE 追踪路径 1.1 CONNECT 要求用隧道…

idea本地debug断点小技巧

idea本地debug断点小技巧 简单的设置断点条件 断点后&#xff0c;右键这个断点&#xff0c;可以在 condition 中填写能得出布尔的表达式 a 1 你如果写如下&#xff0c;表示先给他赋值&#xff0c;然后断住 a 2; true 断点后设置某个变量的值 在 debug 区域可以设置变量…

21. 自动化测试框架开发之Excel配置文件的测试用例改造

21. 自动化测试框架开发之Excel配置文件的测试用例改造 一、测试框架核心架构 1.1 组件依赖关系 # 核心库依赖 import unittest # 单元测试框架 import paramunittest # 参数化测试扩展 from chap3.po import * # 页面对象模型 from file_reader import E…

python-leetcode 69.最小栈

题目&#xff1a; 设计一个支持push,pop,top,操作&#xff0c;并能在常数时间内检索到最小元素的栈。 辅助栈法&#xff1a; 1&#xff1a;使用两个栈&#xff0c;一个主栈用于存储所有元素&#xff0c;另一个辅助栈用于存储当前元素的最小值 2: 每次push时&#xff0c;将元…

YOLO中model.predict方法返回内容Results详解

1.执行代码 resultsmodel.predict(YOLO/ultralytics/assets/zidane.jpg) print(results) 结果如下&#xff1a; 可以看出结果是一个数组形式&#xff0c;数组里每个元素都是Ultralytics的Results对象 1&#xff09;为什么结果是数组&#xff0c;而不是单个对象&#xff1f; …

K8S详解(5万字详细教程)

目录 一、集群管理命令 二、命名空间 1. 获取命名空间列表 2. 创建命名空间 3. 删除命名空间 4. 查看命名空间详情 三、Pod 1. Pod概述 2. Pod相位状态 3. 管理命令 3.1 获取命名空间下容器(pod)列表 3.2 查看pod的详细信息 3.3 创建 && 运行 3.4 删除pod …

STL编程之vector

vector的基础概念&#xff1a;类 #include<iostream> #include<vector> using namespace std;int main() {int a[6] {1,2,4,5,6,7};vector<int> v { 1,3,6,8 };cout << v.capacity() << endl;v.push_back(8);cout << v.capacity() <…

BI是什么意思?一文讲清BI的概念与应用!

目录 一、BI 是什么意思 1. BI 的定义 2. BI 的发展历程 3. BI 的核心组件 二、BI 的应用场景 1. 销售与市场营销 2. 财务管理 ​编辑3. 人力资源管理 4. 生产与运营管理 ​编辑三、选择合适的 BI 工具 1. 考虑企业的需求和规模 2. 评估工具的功能和性能 3. 关注工…

[ 计算机网络 ] 深入理解TCP/IP协议

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

微软开放代理网络愿景

&#x1f310; Microsoft的开放式智能代理网络愿景 2025年05月20日 | AI日报 ![](https://i-blog.csdnimg.cn/direct/e7838b88f17f40c9a435f6dc48d26c59.jpeg#pic_center) 欢迎各位人工智能爱好者 微软刚刚在Build 2025大会上开启了备受期待的AI周活动&#xff0c;通过发布大…

4-5月份,思科,华为,微软,个别考试战报分享

一定要看正版学习资料&#xff0c;在资料上省的钱可能变成后面的补考费&#xff0c;#网络工程师 #华为考试题库 #HCIP题库 #HCIA题库 #HCSP题库 #HCSE题库 #HCSA题库 #华为电力题库 #华为金融题库 #正版题库#思科考试 #CCNP题库 #CCNA题库 #HCIA考试 #CCIE题库 #CCDE题库 #电信…

计算机网络-HTTP与HTTPS

文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信&#xff0c;解决网络互联兼容性问题。 网络模型是计算机网络中用于…

信号波形发生器电路Multisim仿真

一、电路 二、示波器 三、示波器波形 四、所遇到的问题 1、只是把电路仿真出来了&#xff0c;具体原理没有理解。 解&#xff1a; 第一个波形是正弦波&#xff0c;是由电阻和电容的振荡电路产生的。 第二个波形是方波&#xff0c;产生的正弦波通过电压比较器输出一个方波。…

Spring AI 介绍

Python一直是AI领域的主要语言, 主要原因是因其语法简洁易学、拥有丰富且强大的AI专用库及框架、具备跨平台兼容性且社区生态活跃,能高效支撑AI算法开发、数据处理及模型部署。 Spring开发了AI开发的框架Spring AI,对于Java的开发者来说,也可以快速入手AI相关的开发了。 S…

onlyoffice 源码 调试说明 -ARM和x86双模式安装支持

很多用户在调试onlyoffice源码最大的问题是如何搭建环境,这个难度很高,下面提供一键安装的方式,让普通用户也能快速调试源码。 OnlyOffice Document Server 基于源码运行的容器调试模式&#xff0c;凭借 Docker 容器化技术的核心优势&#xff0c;为开发者提供了跨平台、高兼容性…

EXCEL在一列数据前统一添加负号

1.全选数据列 2.右键&#xff0c;设置单元格格式。输入-0&#xff0c;要保留三位小数就输入-0.000. 3.添加完成效果。