PostgreSQL(pgSQL)常用操作

目录

一、数据库管理(创建、连接、删除等)

1. 创建数据库

2. 连接数据库

(1)命令行方式(psql 工具)

(2)SQL 内部切换数据库

3. 删除数据库

二、表操作(创建、修改、删除、索引等)

1. 创建表

2. 修改表(ALTER TABLE)

3. 删除表

4. 查看表信息

5. 创建索引(优化查询速度)

三、数据操作(增、删、改、查)

1. 插入数据(INSERT)

2. 更新数据(UPDATE)

3. 删除数据(DELETE)

4. 查询数据(SELECT)

四、常用进阶操作

1. 事务管理(保证数据一致性)

2. 视图创建(简化复杂查询)

3. 备份与恢复

(1)备份数据库(pg_dump 工具,命令行执行)

(2)恢复数据库(psql/pg_restore 工具)

五、用户与权限管理

1. 创建用户

2. 授权权限

3. 删除用户

六、psql 常用元命令(便捷操作)


一、数据库管理(创建、连接、删除等)

1. 创建数据库

-- 基础创建 CREATE DATABASE db_name; -- 指定字符集、所有者、编码(推荐生产环境使用) CREATE DATABASE db_name WITH OWNER = username -- 数据库所有者 ENCODING = 'UTF8' -- 字符编码 LC_COLLATE = 'zh_CN.UTF-8' -- 排序规则 LC_CTYPE = 'zh_CN.UTF-8' -- 字符分类规则 TABLESPACE = pg_default; -- 表空间

2. 连接数据库

(1)命令行方式(psql 工具)

# 基础连接 psql -U username -d db_name -h host_ip -p port # 示例:连接本地默认端口的test_db数据库 psql -U postgres -d test_db -h 127.0.0.1 -p 5432 # 本地默认配置(用户名postgres,端口5432)可简化 psql -d db_name

(2)SQL 内部切换数据库

\c db_name; -- 等同于MySQL的use db_name;

3. 删除数据库

-- 基础删除(数据库不存在会报错) DROP DATABASE db_name; -- 安全删除(数据库不存在不报错) DROP DATABASE IF EXISTS db_name; -- 强制删除(断开所有连接后删除,需超级权限) DROP DATABASE db_name WITH (FORCE);

二、表操作(创建、修改、删除、索引等)

1. 创建表

CREATE TABLE user_info ( id SERIAL PRIMARY KEY, -- 自增主键(SERIAL等价于int4+自增序列) username VARCHAR(50) NOT NULL UNIQUE, -- 非空唯一 age INT DEFAULT 0, -- 默认值0 email VARCHAR(100), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 默认当前时间 update_time TIMESTAMP ); -- 说明:PostgreSQL 10+推荐使用IDENTITY列替代SERIAL(更标准) CREATE TABLE user_info ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, -- 其他字段同上 );

2. 修改表(ALTER TABLE)

-- 1. 添加字段 ALTER TABLE user_info ADD COLUMN phone VARCHAR(20); -- 2. 修改字段类型 ALTER TABLE user_info ALTER COLUMN email TYPE VARCHAR(150); -- 3. 修改字段默认值 ALTER TABLE user_info ALTER COLUMN age SET DEFAULT 18; -- 4. 删除字段 ALTER TABLE user_info DROP COLUMN IF EXISTS phone; -- 5. 重命名字段 ALTER TABLE user_info RENAME COLUMN update_time TO modify_time; -- 6. 重命名表 ALTER TABLE user_info RENAME TO user_info_new;

3. 删除表

-- 基础删除 DROP TABLE user_info; -- 安全删除 DROP TABLE IF EXISTS user_info; -- 级联删除(删除表及依赖它的对象,如外键关联) DROP TABLE IF EXISTS user_info CASCADE;

4. 查看表信息

-- 方法1:查看当前数据库所有表 \dt -- 方法2:查看指定表结构(详细字段信息) \d user_info -- 方法3:SQL查询表结构 SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'user_info';

5. 创建索引(优化查询速度)

-- 普通索引 CREATE INDEX idx_user_username ON user_info(username); -- 唯一索引(确保字段值唯一) CREATE UNIQUE INDEX idx_user_email ON user_info(email); -- 复合索引(多字段组合) CREATE INDEX idx_user_age_create_time ON user_info(age, create_time); -- 删除索引 DROP INDEX IF EXISTS idx_user_username;

三、数据操作(增、删、改、查)

1. 插入数据(INSERT)

-- 基础插入 INSERT INTO user_info (username, age, email) VALUES ('zhangsan', 25, '[email protected]'); -- 批量插入 INSERT INTO user_info (username, age, email) VALUES ('lisi', 28, '[email protected]'), ('wangwu', 30, '[email protected]'); -- 插入并返回结果(获取自增ID等) INSERT INTO user_info (username, age) VALUES ('zhaoliu', 22) RETURNING id, username, create_time;

2. 更新数据(UPDATE)

-- 基础更新 UPDATE user_info SET age = 26, email = '[email protected]' WHERE username = 'zhangsan'; -- 安全更新(避免无WHERE条件更新全表) UPDATE user_info SET modify_time = CURRENT_TIMESTAMP WHERE id = 1;

3. 删除数据(DELETE)

-- 基础删除 DELETE FROM user_info WHERE username = 'zhaoliu'; -- 清空全表(不可回滚,谨慎使用) TRUNCATE TABLE user_info; -- 清空全表并重置自增序列(SERIAL/IDENTITY列) TRUNCATE TABLE user_info RESTART IDENTITY;

4. 查询数据(SELECT)

-- 基础查询 SELECT id, username, age FROM user_info; -- 条件查询 SELECT * FROM user_info WHERE age > 25 AND email IS NOT NULL; -- 排序查询 SELECT * FROM user_info ORDER BY age DESC, create_time ASC; -- 分页查询(PostgreSQL特有,比LIMIT+OFFSET更高效) -- 第1页(每页10条) SELECT * FROM user_info ORDER BY id LIMIT 10 OFFSET 0; -- 第2页 SELECT * FROM user_info ORDER BY id LIMIT 10 OFFSET 10; -- 聚合查询 SELECT COUNT(*) AS total_count, -- 总条数 AVG(age) AS avg_age, -- 平均年龄 MAX(age) AS max_age -- 最大年龄 FROM user_info; -- 分组查询 SELECT age, COUNT(*) AS user_count FROM user_info GROUP BY age HAVING COUNT(*) > 1; -- 分组后过滤

四、常用进阶操作

1. 事务管理(保证数据一致性)

-- 开启事务 BEGIN; -- 执行操作(多个SQL语句) INSERT INTO user_info (username, age) VALUES ('test1', 18); UPDATE user_info SET age = 19 WHERE username = 'test1'; -- 提交事务(确认修改) COMMIT; -- 回滚事务(放弃修改,回到BEGIN前状态) -- ROLLBACK;

2. 视图创建(简化复杂查询)

-- 创建视图 CREATE VIEW v_user_adult AS SELECT id, username, email, create_time FROM user_info WHERE age >= 18; -- 查询视图 SELECT * FROM v_user_adult; -- 删除视图 DROP VIEW IF EXISTS v_user_adult;

3. 备份与恢复

(1)备份数据库(pg_dump 工具,命令行执行)

# 基础备份(导出SQL文件) pg_dump -U username -d db_name -h host -p port > backup.sql # 压缩备份(推荐,节省空间) pg_dump -U username -d db_name | gzip > backup.sql.gz # 仅备份表结构(不包含数据) pg_dump -U username -d db_name -s > backup_schema.sql

(2)恢复数据库(psql/pg_restore 工具)

# 恢复SQL格式备份 psql -U username -d db_name -h host -p port < backup.sql # 恢复压缩备份 gzip -d -c backup.sql.gz | psql -U username -d db_name # 恢复自定义格式备份(pg_dump -F c导出的文件) pg_restore -U username -d db_name -h host -p port backup.dump

五、用户与权限管理

1. 创建用户

-- 基础创建 CREATE USER user1 WITH PASSWORD '123456'; -- 创建带权限的用户(允许创建数据库、角色) CREATE USER user2 WITH PASSWORD '123456' CREATEDB CREATEROLE;

2. 授权权限

-- 授予数据库所有权限 GRANT ALL PRIVILEGES ON DATABASE db_name TO user1; -- 授予表的查询/插入权限 GRANT SELECT, INSERT ON TABLE user_info TO user1; -- 授予序列权限(自增列需要) GRANT USAGE, SELECT ON SEQUENCE user_info_id_seq TO user1; -- 收回权限 REVOKE INSERT ON TABLE user_info FROM user1;

3. 删除用户

-- 基础删除 DROP USER IF EXISTS user1; -- 级联删除(用户拥有的对象一并删除) DROP USER IF EXISTS user2 CASCADE;

六、psql 常用元命令(便捷操作)

元命令功能说明
\c db_name切换数据库
\l查看所有数据库
\dt查看当前数据库所有表
\d table_name查看指定表结构
\di查看所有索引
\du查看所有用户
\q退出 psql 终端
\x切换横向 / 纵向显示查询结果
\timing开启 / 关闭查询耗时统计

Read more

Flutter 三方库 flutter_adaptive_scaffold 的鸿蒙化适配指南 - 掌握一套代码适配全场景终端的自适应架构技术、助力鸿蒙应用构建从手机到平板及折叠屏的极致无缝交互体系

Flutter 三方库 flutter_adaptive_scaffold 的鸿蒙化适配指南 - 掌握一套代码适配全场景终端的自适应架构技术、助力鸿蒙应用构建从手机到平板及折叠屏的极致无缝交互体系

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 flutter_adaptive_scaffold 的鸿蒙化适配指南 - 掌握一套代码适配全场景终端的自适应架构技术、助力鸿蒙应用构建从手机到平板及折叠屏的极致无缝交互体系 前言 在 OpenHarmony 鸿蒙应用追求“万物互联、全场景覆盖”的伟大进程中,屏幕尺寸的多样性(从 6 英寸手机到 12 英寸平板,再到 2D/3D 模式切换的折叠屏)是每一位 UI 开发者必须正面迎接的挑战。如何在不为每种设备重写 UI 的前提下,实现导航栏自动从“底部”平滑流转到“侧边”?如何在宽屏模式下自动开启“双栏(Master-Detail)”布局?flutter_adaptive_scaffold 作为一个由 Flutter

By Ne0inhk
在 macOS 上通过 Docker 本地安装 OpenClaw 完整教程

在 macOS 上通过 Docker 本地安装 OpenClaw 完整教程

在 macOS 上通过 Docker 本地安装 OpenClaw 完整教程 什么是 OpenClaw?—— 你的本地 AI 智能体执行框架 OpenClaw 不仅仅是一个聊天机器人,而是一个功能强大的 AI 智能体执行框架。你可以把它想象成一个能自主思考、调用工具、并替你完成复杂任务的数字员工。 🧠 核心概念 * 智能体:OpenClaw 的核心大脑。它能理解你的自然语言指令,拆解任务,并决定调用哪些工具来执行。 * 网关:所有外部访问的入口。它负责处理 WebSocket 连接、管理设备配对、路由消息,是你与智能体交互的桥梁。 * 技能:智能体可调用的具体工具,比如访问文件、操作浏览器、发送消息、查询数据库等。你可以根据需要扩展技能库。 * 记忆:OpenClaw 可以存储对话历史和重要信息,实现长期记忆和上下文理解,让交互更连贯。 * 通道:连接外部聊天平台的渠道,如

By Ne0inhk
HarmonyOS6半年磨一剑 - RcIcon组件实战案例集与应用开发指南

HarmonyOS6半年磨一剑 - RcIcon组件实战案例集与应用开发指南

文章目录 * 前言 * 项目简介 * 核心特性 * 开源计划 * rchoui官网 * 文档概述 * 第一章: 基础用法实战 * 1.1 三种符号引用方式 * 1.2 应用场景 - 工具栏快速导航 * 第二章: 尺寸系统实战 * 2.1 响应式尺寸配置 * 2.2 应用场景 - 统一设计系统尺寸规范 * 第三章: 颜色系统实战 * 3.1 多彩色系配置 * 3.2 应用场景 - 状态指示系统 * 第四章: 双风格系统实战 * 4.1 线型与实底风格对比 * 4.2 应用场景 - 底部导航栏 * 第五章: 圆角系统实战 * 5.

By Ne0inhk
Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构 前言 在鸿蒙(OpenHarmony)生态迈向万物互联、涉及海量离线资源标识、蓝牙广播载荷(BLE Payload)及二维码数据极限压缩的背景下,如何生成既能保留 UUID 强随机性、又能极大缩减字符长度的唯一标识符,已成为优化存储与通讯效率的“空间必修课”。在鸿蒙设备这类强调分布式软总线传输与每一字节功耗敏感的环境下,如果应用依然直接传输长度达 36 字符的标准 UUID,由于由于有效载荷溢出,极易由于由于传输协议限制导致数据截断或多次分包带来的延迟。 我们需要一种能够实现高进制转换、支持双向编解码且具备低碰撞概率的短 ID 生成方案。 short_uuids 为 Flutter 开发者引入了将标准 UUID 转化为短格式字符串的高性能算法。它利用

By Ne0inhk