PostgreSQL

目录

前言

一、数据库管理命令

[1. 创建数据库](#1. 创建数据库)

[2. 修改数据库](#2. 修改数据库)

二、表操作命令

[1. 创建表](#1. 创建表)

[2. 修改表结构](#2. 修改表结构)

三、索引操作

[1. 创建索引](#1. 创建索引)

四、权限管理

[1. 授权命令](#1. 授权命令)

五、查询优化命令

[1. EXPLAIN 分析](#1. EXPLAIN 分析)

六、备份恢复命令

[1. pg_dump 逻辑备份](#1. pg_dump 逻辑备份)

七、维护命令

[1. VACUUM 维护](#1. VACUUM 维护)

八、高级特性命令

[1. 窗口函数](#1. 窗口函数)

九、复制命令

[1. 创建复制槽](#1. 创建复制槽)

十、扩展管理

[1. 安装扩展](#1. 安装扩展)

总结与最佳实践


前言

多久没写这类东西了?不知道... ...因为也没那么在意。怎么说呢?提不起精神,玩游戏也是这样,是夏天了?慢慢调整吧,毕竟生活是自己的,未来是自己的,自己是别人的... ...心如已灰之本,身如不系之舟?

管他呢,我就是一个没心没肺,只想享受的躺赢狗!这次,写这个前言当然也有自己的私心------推广自己喜欢的游戏《碧蓝航线》!!!恭喜"碧蓝"迎来了8周年!!!可以说,如果没有它,她们,我或许真的会成为一个内在,没有底蕴的烂人。我是因为什么来玩的?我也不记得了,作为一个已有3年阅历的老萌新,这款游戏可以比喻一个"电子盆栽",对于如今快节奏的生活再好不过。我的言语也并不擅长,我只能说:"这游戏保好玩的,涩涩,战力,甚至相应的番剧也具有!"

所以,如果真的对这款游戏感兴趣,这就是前往那个拥有各类舰娘的港口。其实我也不希望太多人去了解这款游戏,俗话:林子大了,什么鸟都有。所以就这样刚刚好,如果真的对这款游戏不喜欢,也请理性的进行批评。因为天外有天,人无完人。毕竟,我也对它不足的地方进行了反馈。

这次的前言就说这些了,那么就继续教给AI来为大家进行知识点的讲解吧。碧蓝航线!8周年快乐!!!

  1. postgres=#\l

    | 元命令 | 作用 |
    | \l | 列出所有数据库。 |
    | \c | 【数据库名】或 \connect[数据库名] |
    | \dn | 列出所有模式(Schema) |
    | \db | 列出所有表空间 |
    | \? | 显示pgsql命令的说明(元命令查询帮助) |
    | \q | 退出psql |
    | \dt | 列出当前数据库的所有库 |
    | \d [table] | 查看表结构 |

    \du 列出所有用户
  2. postgres=#\l+
    \l+ 的输出比 \l 多了size(大小),table space和description列

    • :扩展输出,显示更多字段或详细信息。
  3. postgres=# select datname from pg_databasse;
    pg_database 是系统表:它存储了 PostgresQL 实例中所有数据库的元信息(如数据库名称、所有者、编码等)。属于系统目录(System Catalog):类似 MySQL的 information_schema,但 PostgreSqL 的系统目录更底层且直接存储在pg_catalog 模式中。

    pg_database 是系统目录表,所以无论当前连接到哪个数据库,该表始终可见系统表默认属于 pg_catalog 模式,而 pg_catalog 始终位于搜索路径(search_path)的首位。因此,查询时无需显式指定模式(如pgcatalog.pg_database)。

二、创建库

复制代码
postgres=#create daatabase lemon;
CREATE DATABASE

三、删除库

复制代码
postgres=#drop database lemon;
DROP DATABASE

四、切换库

复制代码
postgres=#c mydb
You are now connected to database "mydb" as user "postgres"
mydb=#

五、查看库大小

函数以字节为单位返回数据库的大小

复制代码
postgres=# SELECT pg database size('mydb );
pg database size
7594499
(1行记录)
pg_size_pretty()函数将字节转为更易于阅读值
postgres-# SELECT pg size pretty(pg database size( mydb'));
pg size pretty
7417 kB
(1行记录) 

一、数据库管理命令

1. 创建数据库

复制代码
CREATE DATABASE dbname
[ [ WITH ] 
   [ OWNER [=] role_name ]
   [ TEMPLATE [=] template ]
   [ ENCODING [=] encoding ]
   [ LC_COLLATE [=] lc_collate ]
   [ LC_CTYPE [=] lc_ctype ]
   [ TABLESPACE [=] tablespace_name ]
   [ ALLOW_CONNECTIONS [=] allowconn ]
   [ CONNECTION LIMIT [=] connlimit ]
   [ IS_TEMPLATE [=] istemplate ] ]

选项解析

  • OWNER:指定数据库所有者

  • TEMPLATE:模板数据库(默认template1)

  • ENCODING:字符编码(如UTF8)

  • CONNECTION LIMIT:最大连接数(-1表示无限制)

2. 修改数据库

复制代码
ALTER DATABASE name [ [ WITH ] option [...] ]
选项包括:
    ALLOW_CONNECTIONS allowconn
    CONNECTION LIMIT connlimit
    IS_TEMPLATE istemplate
    RENAME TO new_name
    OWNER TO new_owner
    SET TABLESPACE new_tablespace
    SET configuration_parameter { TO | = } { value | DEFAULT }

二、表操作命令

1. 创建表

复制代码
CREATE [ [ GLOBAL | LOCAL ] { 
   TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name (
   column_name data_type [ COLLATE collation ] [ column_constraint [...] ]
   [, ... ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ PARTITION BY { RANGE | LIST | HASH } ( column_name [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]

关键选项

  • UNLOGGED:不写WAL日志(性能高但崩溃后丢失数据)

  • PARTITION BY:分区类型(范围/列表/哈希)

  • WITH (storage_parameter):指定填充因子等存储参数

2. 修改表结构

复制代码
ALTER TABLE [ IF EXISTS ] name
    action [, ... ]
其中action可以是:
    ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [ column_constraint [...] ]
    DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
    RENAME [ COLUMN ] column_name TO new_column_name
    ADD table_constraint
    VALIDATE CONSTRAINT constraint_name
    DISABLE/ENABLE TRIGGER

三、索引操作

1. 创建索引

复制代码
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ]
    ON [ ONLY ] table_name [ USING method ]
    ( column_name [ ASC | DESC | NULLS { FIRST | LAST } ] [, ...] )
    [ INCLUDE ( column_name [, ...] ) ]
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
    [ WHERE predicate ]

关键特性

  • CONCURRENTLY:非阻塞创建(不影响DML操作)

  • USING method:索引类型(btree/hash/gin/gist等)

  • INCLUDE:包含列(覆盖索引)

  • WHERE:部分索引条件

四、权限管理

1. 授权命令

复制代码
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE 
         | REFERENCES | TRIGGER | CREATE | CONNECT 
         | TEMPORARY | EXECUTE | USAGE | ALL [ PRIVILEGES ] }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
       | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]

五、查询优化命令

1. EXPLAIN 分析

复制代码
EXPLAIN [ ( option [, ...] ) ] statement
其中option包括:
    ANALYZE [ boolean ]
    VERBOSE [ boolean ]
    COSTS [ boolean ]
    BUFFERS [ boolean ]
    TIMING [ boolean ]
    SUMMARY [ boolean ]
    FORMAT { TEXT | XML | JSON | YAML }

常用组合EXPLAIN (ANALYZE, BUFFERS) SELECT...

六、备份恢复命令

1. pg_dump 逻辑备份

复制代码
pg_dump [connection-option...] [option...] [dbname]
关键选项:
    -F, --format=c|d|t|p  输出格式(自定义/目录/tar/纯文本)
    -j, --jobs=NUM        并行任务数
    --section=pre-data|data|post-data 分段备份
    --exclude-table-data=TABLE  排除表数据

七、维护命令

1. VACUUM 维护

复制代码
VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE 
           | DISABLE_PAGE_SKIPPING } [, ...] ) ] 
    [ table_name [ (column_name [, ...] ) ] ]

模式说明

  • FULL:完全重组(锁表)

  • ANALYZE:更新统计信息

  • VERBOSE:显示详细报告

八、高级特性命令

1. 窗口函数

复制代码
function_name ([expression [, expression ... ]])
    OVER ( 
        [PARTITION BY expression [, ...]]
        [ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...]]
        [frame_clause]
    )

框架子句示例RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

九、复制命令

1. 创建复制槽

复制代码
SELECT * FROM pg_create_physical_replication_slot('slot_name');
SELECT * FROM pg_create_logical_replication_slot('slot_name', 'plugin_name');

十、扩展管理

1. 安装扩展

复制代码
CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
    [ VERSION version ]
    [ CASCADE ]

(以下为部分展示,实际文档包含40+核心命令,每个命令均包含选项详解和应用示例)

总结与最佳实践

  1. 性能关键命令

    • 使用CREATE INDEX CONCURRENTLY避免生产环境锁表

    • VACUUM ANALYZE应定期执行(可配置autovacuum)

  2. 安全建议

    • 遵循最小权限原则(GRANT/REVOKE精细控制)

    • 生产环境避免使用UNLOGGED

  3. 高可用方案

    • 逻辑复制槽需监控延迟(pg_replication_slots视图)

    • 使用pg_basebackup建立物理备份

  4. 版本特性

    • PG 12+支持生成的列(GENERATED ALWAYS AS)

    • PG 14+支持JSONB下标语法

相关推荐
七牛云行业应用7 小时前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
自不量力的A同学7 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.7 小时前
Mysql
数据库·mysql
全栈前端老曹7 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8637 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道8 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
AskHarries8 小时前
Debian 12 环境下 PostgreSQL 15 部署与安全配置
postgresql
逍遥德8 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪8 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_8 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd