PG数据库日常应用

一、基本使用

1. 登录数据库

使用 psql 命令行工具连接到数据库:

bash 复制代码
su  - postgres
psql

2. 数据库操作

(1) 列出库:

sql 复制代码
\l
-- 或
SELECT datname FROM pg_database;

(2) 创建库:

sql 复制代码
CREATE DATABASE <数据库名>;

(3) 删除库:

sql 复制代码
DROP DATABASE <数据库名>;

(4) 切换库:

sql 复制代码
\c <数据库名>
-- 或
\connect <数据库名>

(5) 查看库大小:

sql 复制代码
SELECT pg_size_pretty(pg_database_size('<数据库名>'));

3. 数据表操作

(1) 列出表:

sql 复制代码
\dt
-- 或
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

(2) 创建表:

sql 复制代码
CREATE TABLE <表名> (
  列名1 数据类型 [约束],
  列名2 数据类型 [约束],
  ...
);

(3) 复制表:

sql 复制代码
CREATE TABLE <新表名> AS SELECT * FROM <原表名>; -- 复制结构和数据
CREATE TABLE <新表名> (LIKE <原表名> INCLUDING ALL); -- 复制结构(包括约束、索引等)

(4) 删除表:

sql 复制代码
DROP TABLE <表名>; -- 删除表结构和数据
DROP TABLE <表名> CASCADE; -- 级联删除依赖对象(如视图)

(5) 查看表结构:

sql 复制代码
\d <表名>
-- 或
SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = '<表名>';

4. 模式 (Schema) 操作命令

(1) 创建模式:

sql 复制代码
CREATE SCHEMA <模式名>;

(2) 默认模式: PostgreSQL 默认使用 public 模式

(3) 删除模式:

sql 复制代码
DROP SCHEMA <模式名>;
DROP SCHEMA <模式名> CASCADE; -- 级联删除模式内的所有对象

(4) 查看所有模式:

sql 复制代码
\dn
-- 或
SELECT schema_name FROM information_schema.schemata;

(5) 在指定模式中创建表:

sql 复制代码
CREATE TABLE <模式名>.<表名> (...);

(6) 切换当前模式:

sql 复制代码
SET search_path TO <模式名>;

(7) 查看当前所在 schema:

sql 复制代码
SELECT current_schema();

(8) 查看搜索路径: 搜索路径决定了对象名的解析顺序。

sql 复制代码
SHOW search_path;

(9) PostgreSQL 的模式隔离: 模式提供了命名空间隔离。不同模式下的对象(如表)可以同名。访问非当前模式或搜索路径中模式的对象时,需要使用 <模式名>.<对象名> 的格式

5. 数据操作

(1) 添加数据:

sql 复制代码
INSERT INTO <表名> (列1, 列2, ...) VALUES (值1, 值2, ...);
INSERT INTO <表名> SELECT ... FROM ...; -- 从查询结果插入

(2) 查询数据:

sql 复制代码
SELECT 列1, 列2, ... FROM <表名> WHERE <条件> ORDER BY <排序列> LIMIT <数量>;

(3) 修改数据:

sql 复制代码
UPDATE <表名> SET 列1 = 值1, 列2 = 值2, ... WHERE <条件>;

(4) 删除数据:

sql 复制代码
DELETE FROM <表名> WHERE <条件>;
TRUNCATE TABLE <表名>; -- 快速删除所有数据并重置序列(如果有)

6. 备份与恢复

(1) SQL 转储 (备份单个数据库):

bash 复制代码
pg_dump -U <用户名> -d <数据库名> -f <备份文件名.sql>

(2) 从转储中恢复:

bash 复制代码
psql -U <用户名> -d <目标数据库名> -f <备份文件名.sql>

(3) 使用 pg_dumpall (备份所有数据库):

bash 复制代码
pg_dumpall -U <用户名> -f <备份文件名.sql>

恢复 pg_dumpall 生成的备份通常需要超级用户权限

7. 远程连接

(1) 修改 PostgreSQL 监听地址: 编辑配置文件 postgresql.conf (通常位于 /etc/postgresql/<版本>/main//var/lib/pgsql/<版本>/data/),找到 listen_addresses 参数:

复制代码
listen_addresses = '*'  # 监听所有 IP 地址,或指定具体 IP

(2) 配置访问权限: 编辑配置文件 pg_hba.conf (与 postgresql.conf 同目录),添加允许远程连接的规则,例如:

复制代码
# TYPE  DATABASE  USER  ADDRESS  METHOD
host    all       all   0.0.0.0/0    md5  # 允许所有用户从任何 IP 使用密码(md5)连接所有数据库

(3) 重启服务: 使配置生效。

bash 复制代码
sudo systemctl restart postgresql

(4) 验证远程连接: 从远程机器尝试连接:

bash 复制代码
psql -U <用户名> -d <数据库名> -h <PostgreSQL服务器IP> -p <端口>

8. 重置密码

(1) 备份配置文件: 在进行任何修改前,备份 pg_hba.conf

(2) 修改配置文件:pg_hba.conf 中,临时添加一行允许本地无需密码的连接(用于重置):

复制代码
# TYPE  DATABASE  USER  ADDRESS  METHOD
local   all       all             trust  # 仅用于临时重置密码,完成后务必删除或改回

(3) 重启服务: 应用 pg_hba.conf 的更改

bash 复制代码
sudo systemctl restart postgresql

(4) 修改密码: 使用 psql 本地免密登录后修改密码:

bash 复制代码
psql -U postgres
ALTER USER <用户名> WITH PASSWORD '<新密码>';
\q

完成后,立即将 pg_hba.conf 中那行 trust 改回原来的安全设置(如 md5),并再次重启 PostgreSQL 服务

相关推荐
淼淼爱喝水2 小时前
Ansible Ad-Hoc 命令基础实战(Linux 系统)
linux·服务器·数据库
CodeMartain5 小时前
Redis为什么快?
数据库·redis·缓存
Anastasiozzzz8 小时前
深入研究RAG: 在线阶段-查询&问答
数据库·人工智能·ai·embedding
卤炖阑尾炎11 小时前
基于 MySQL 主主复制 + HAProxy+Keepalived 构建高可用集群实战
数据库·mysql
Dxy123931021611 小时前
MySQL 如何高效删除大量数据:策略与最佳实践
数据库·mysql·oracle
倔强的石头_11 小时前
从 “不得不存” 到 “战略必争”:工业数据的价值觉醒之路
数据库
倔强的石头_12 小时前
新型电力系统应该用什么数据库?——时序数据库选型与落地实战
数据库
南汐以墨12 小时前
一个另类的数据库-Redis
数据库·redis·缓存
RInk7oBjo13 小时前
spring-事务管理
数据库·sql·spring