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

Vitis使用教程:从零实现AI模型FPGA部署

从零开始:用Vitis把AI模型部署到FPGA上,我走过的每一步都算数 最近在做边缘AI推理项目时,被一个现实问题卡住了:GPU功耗太高,端侧跑不动;云端延迟又太大,实时性扛不住。于是我把目光转向了FPGA——这块曾经“难啃”的硬件,如今在 Vitis 的加持下,竟然也能像写软件一样开发AI加速器。 今天我想和你分享的,不是一篇冷冰冰的技术文档,而是一次真实的、手把手带你从模型训练到板级验证的全过程实战记录。如果你也想让自己的PyTorch模型在KV260开发板上跑出上千FPS,同时保持极低功耗,那这篇文值得你完整读一遍。 为什么是FPGA?为什么是Vitis? 先说结论: FPGA + Vitis AI = 边缘智能场景下的“黄金组合” 传统印象里,FPGA开发等于Verilog、时序约束、逻辑综合……门槛高得吓人。但Xilinx(现AMD)推出的 Vitis统一平台 彻底改变了这一点。它允许我们用C/C++甚至Python来描述算法,再通过 高层次综合(HLS) 自动生成硬件电路。 更关键的是,

By Ne0inhk
告别小白!吃透 MySQL 基本查询,看这一篇就够了

告别小白!吃透 MySQL 基本查询,看这一篇就够了

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.Create 1.1替换 二.Retrieve 2.1SELECT列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4为查询结果指定别名 2.1.5结果去重 2.2WHERE条件 2.2.1英语不及格的同学及英语成绩 2.2.2语文成绩在[80,90]分的同学及语文成绩

By Ne0inhk

ARM CMN-700 架构设计与实现指南

目录 第一章:启程:通往一致性未来的片上高速网络 1.1 困局与破局:总线架构在多核时代为何“堵车”? 1.2 CMN-700的定位:为高性能计算而生的互连引擎 1.3 核心设计理念:模块化、可配置与层级化 1.4 全景速览:一个完整SoC中CMN-700的典型部署图景 1.5 本章小结与思维导图 第二章:绘制CMN-700的骨架——拓扑、路由与寻址 2.1 拓扑选型艺术:Mesh为何成为高性能计算的首选? 2.2 关键“地标”节点初次亮相:RN、HN、SN、MN、XP的角色定义 2.3 地址映射与路由策略:快递系统里的智能导航 2.3.1

By Ne0inhk

MongoDB哈希索引实战:分布式环境下的数据均匀分布策略

文章目录 * 一、为什么需要哈希索引?分布式环境的核心挑战 * 数据倾斜的典型场景 * 哈希索引的核心价值 * 二、哈希索引原理:如何实现均匀分布? * 1. 底层机制 * 2. 与范围分片的关键区别 * 三、实战配置:从零构建均匀分布的分片集群 * 步骤1:选择合适的分片键(成败关键!) * 步骤2:创建哈希索引并启用分片 * 步骤3:监控与调优分布均匀性 * 四、深度策略:如何应对复杂场景? * 场景1:既要均匀分布,又要范围查询 → 复合分片键 * 场景2:低基数字段强制哈希 → 人工扩充熵 * 场景3:数据冷热分离 → 与标签分片(Tag-based Sharding)结合 * 五、避坑指南:实战中的致命陷阱 * 陷阱1:误用哈希索引做范围查询 * 陷阱2:chunk迁移引发性能雪崩 * 陷阱3:哈希冲突导致数据倾斜 * 六、决策树:

By Ne0inhk