PostgreSQL DDL(数据定义语言)深度详解文档

别再手动建表了!用SpringBoot JPA + PostgreSQL自动生成表结构(附ddl-auto配置详解) 本文详细解析了SpringBoot JPA与PostgreSQL结合使用时,如何通过`ddl-auto`配置实现表结构自动化管理。从create、update、validate到create-drop四种模式的适用场景与风险,到开发、测试、生产环境的最佳配置方案,帮助开发者高效安全地管理数据库结构,避免手动维护的繁琐与潜在问题。 阅读详情

以下是专为 Java 后端开发者(尤其是使用 Spring Boot 的团队)撰写的 PostgreSQL DDL(数据定义语言)深度详解文档,全面覆盖定义、作用、核心内容、企业级最佳实践,并提供标准、完整、带中文注释的实战示例,助你推动团队数据库规范落地。


📐 PostgreSQL DDL(数据定义语言)深度详解文档

—— 数据库结构的“建筑师”与团队标准化基石

适用对象:Java 开发、后端架构师、技术负责人、DBA 协作团队
目标:系统掌握 PostgreSQL DDL 的所有核心语句与企业级规范,统一团队建表、建索引、改结构的标准,杜绝“野蛮开发”。


一、DDL 是什么?(Definition)

DDL(Data Definition Language,数据定义语言)是用于定义、修改、删除数据库对象结构的 SQL 子集。
它不操作数据本身,而是定义数据的容器、规则与访问路径。

✅ 核心作用:

作用说明
构建数据模型创建表、视图、序列、函数等结构
约束数据完整性通过主键、外键、唯一、检查约束确保数据合法
优化查询性能创建索引、分区表加速访问
实现扩展能力定义自定义类型、枚举、域、函数、插件
支撑系统演进通过版本化脚本安全地变更结构

💡 关键认知:
在 Java 项目中,DDL 不是“写一次就不管”的脚本,而是系统架构的契约。
任何表结构变更,都应像代码提交一样——版本化、可追溯、可回滚。


二、DDL 包含哪些内容?(Core Components)

PostgreSQL 的 DDL 主要包含以下 7 类核心语句:

类别语句作用企业级重要性
✅ 表结构CREATE TABLE / DROP TABLE / TRUNCATE定义/清空/删除表核心,所有业务数据载体
✅ 字段变更ALTER TABLE ... ADD COLUMN / ALTER COLUMN / DROP COLUMN修改表结构高频操作,必须规范
✅ 索引管理CREATE INDEX / DROP INDEX加速查询性能命脉,必须显式创建
✅ 约束管理ADD CONSTRAINT / DROP CONSTRAINT定义业务规则防止脏数据,替代 Java 层校验
✅ 视图与物化视图CREATE VIEW / CREATE MATERIALIZED VIEW封装复杂查询提升复用性,降低 Java 逻辑复杂度
✅ 序列管理CREATE SEQUENCE / ALTER SEQUENCE生成自增 ID高并发场景下替代 SERIAL 更灵活
✅ 模式与权限CREATE SCHEMA / GRANT(部分)组织对象命名空间多模块/微服务隔离

✅ 重要提醒:
GRANT 虽属 DCL,但在 DDL 中常与对象创建一起使用,建议统一管理。


三、DDL 核心语句详解与企业级标准示例(带中文注释)

以下示例均为生产环境推荐写法,遵循 PostgreSQL 最佳实践与 Java 团队协作规范。


✅ 1. CREATE TABLE —— 创建表(企业标准模板)

核心原则:
所有表必须包含:主键、业务唯一标识、创建/更新时间、状态字段、扩展字段。

-- 📌 示例:创建用户表(企业级标准模板)
CREATE TABLE users (
    -- ✅ 1. 主键:BIGSERIAL(自增整型,推荐)
    id BIGSERIAL PRIMARY KEY,

    -- ✅ 2. 业务主键:UUID(分布式系统必备,避免ID暴露)
    uuid UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),

    -- ✅ 3. 必填字段 + 唯一约束
    username VARCHAR(50) UNIQUE NOT NULL CHECK (LENGTH(username) >= 3),
    email VARCHAR(100) UNIQUE NOT NULL CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),

    -- ✅ 4. 密码存储(哈希值)
    password_hash TEXT NOT NULL,

    -- ✅ 5. 枚举状态(避免使用字符串“active/inactive”,用 CHECK 约束)
    status VARCHAR(20) DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'banned', 'deleted')),

    -- ✅ 6. 时间戳:自动填充,Java 层无需维护
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),

    -- ✅ 7. 扩展字段:JSONB(存储动态配置,如用户偏好、通知设置)
    metadata JSONB DEFAULT '{}'::JSONB,

    -- ✅ 8. 可选字段:手机号(允许为空)
    phone VARCHAR(20) NULL,

    -- ✅ 9. 注释:为字段添加业务说明(团队协作必备!)
    -- COMMENT ON COLUMN users.username IS '用户登录名,唯一,3~50字符';
    -- COMMENT ON COLUMN users.metadata IS '用户个性化设置,JSONB格式,如 {"theme": "dark", "lang": "zh"}';
);

-- ✅ 10. 为常用查询字段创建索引(必须!)
CREATE INDEX idx_users_email ON users (email);                    -- ✅ 加速登录、找回密码
CREATE INDEX idx_users_status ON users (status);                  -- ✅ 加速状态筛选(如查询所有活跃用户)
CREATE INDEX idx_users_metadata ON users USING GIN (metadata);    -- ✅ JSONB 必须用 GIN 索引,否则查询效率极低!
CREATE INDEX idx_users_created_at ON users (created_at DESC);     -- ✅ 按创建时间排序查询
CREATE INDEX idx_users_uuid ON users (uuid);                      -- ✅ 业务系统常按 UUID 查询

-- ✅ 11. 为组合查询创建复合索引(提升多条件查询性能)
CREATE INDEX idx_users_status_created ON users (status, created_at DESC);

-- ✅ 12. 添加表注释(清晰说明业务用途)
COMMENT ON TABLE users IS '系统用户主表,存储核心身份与配置信息';

✅ 团队规范建议:

  • 所有表必须包含:id(BIGSERIAL)、uuid(UUID)、created_at、updated_at、status。
  • metadata 字段统一用 JSONB,避免“字段爆炸”。
  • 所有索引必须命名规范:idx_表名_字段名。
  • 所有字段必须有注释(COMMENT ON COLUMN),否则新人看不懂。

✅ 2. ALTER TABLE —— 修改表结构(安全变更指南)

原则:禁止直接在生产库执行 ALTER!必须通过 Flyway 版本脚本管理。

-- 📌 示例1:添加新字段(推荐:允许 NULL,兼容旧数据)
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(255) NULL;
COMMENT ON COLUMN users.avatar_url IS '用户头像URL,支持CDN地址';

-- 📌 示例2:修改字段类型(谨慎!需确保数据兼容)
-- 假设原 phone 为 VARCHAR(15),现需支持国际号(+86 开头,最长20位)
ALTER TABLE users ALTER COLUMN phone TYPE VARCHAR(20);

-- 📌 示例3:修改字段默认值
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- 📌 示例4:为字段添加非空约束(必须先清理空数据!)
-- ❌ 错误:直接加 NOT NULL 会失败(存在空值)
-- ✅ 正确:先更新空值,再加约束
UPDATE users SET phone = '' WHERE phone IS NULL;  -- ✅ 先填充默认值
ALTER TABLE users ALTER COLUMN phone SET NOT NULL;

-- 📌 示例5:添加检查约束(业务规则下沉)
ALTER TABLE users ADD CONSTRAINT chk_username_length CHECK (LENGTH(username) >= 3 AND LENGTH(username) <= 50);

-- 📌 示例6:添加外键约束(保证引用完整性)
-- 假设已存在 orders 表
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id) 
ON DELETE CASCADE  -- ✅ 用户删除,订单级联删除
ON UPDATE CASCADE; -- ✅ 用户ID变更,订单同步更新(慎用,通常不改ID)

-- 📌 示例7:删除字段(生产环境极少使用!建议用软删除)
-- ALTER TABLE users DROP COLUMN phone;  -- ⚠️ 生产环境禁止!应保留字段,标记弃用

-- 📌 示例8:重命名字段(需谨慎,影响 Java 实体类)
ALTER TABLE users RENAME COLUMN avatar_url TO profile_image_url;

✅ 团队规范建议:

  • 所有 ALTER 必须写入 Flyway 脚本,命名如:V2__add_avatar_url_to_users.sql。
  • 添加 NOT NULL 前,必须先清理或填充历史空值。
  • 删除字段前,确认无任何 Java 服务、报表、API 依赖该字段。
  • 外键 ON DELETE CASCADE 仅用于“子表依赖主表”的场景(如订单→用户),避免误删。

✅ 3. CREATE INDEX —— 索引管理(性能命脉)

真理:没有索引的查询 = 全表扫描 = 系统崩溃的开端。

-- 📌 示例1:普通 B-Tree 索引(最常用)
CREATE INDEX idx_orders_user_id ON orders (user_id);
CREATE INDEX idx_orders_status ON orders (status);
CREATE INDEX idx_orders_created_at ON orders (created_at DESC);

-- 📌 示例2:复合索引(多字段联合查询)
CREATE INDEX idx_orders_user_status ON orders (user_id, status, created_at DESC);

-- 📌 示例3:唯一索引(强制唯一性)
CREATE UNIQUE INDEX idx_users_username_unique ON users (username);
-- ✅ 与 UNIQUE 约束等价,但可独立管理

-- 📌 示例4:部分索引(节省空间,提升性能)
-- 只为“活跃用户”建立邮箱索引(非活跃用户不查)
CREATE INDEX idx_users_active_email ON users (email) WHERE status = 'active';

-- 📌 示例5:GIN 索引(JSONB、数组、全文检索专用)
CREATE INDEX idx_users_metadata_gin ON users USING GIN (metadata);
CREATE INDEX idx_products_tags_gin ON products USING GIN (tags);  -- ✅ tags 是 text[] 数组类型

-- 📌 示例6:BRIN 索引(超大表时序数据,如日志)
CREATE TABLE logs (
    id BIGSERIAL,
    event_time TIMESTAMPTZ,
    message TEXT
);
CREATE INDEX idx_logs_event_time_brin ON logs USING BRIN (event_time);  -- ✅ 适用于百万级日志表,索引体积小

-- 📌 示例7:表达式索引(对函数结果建立索引)
-- 查询时经常按邮箱域名分组:WHERE email LIKE '%@company.com'
CREATE INDEX idx_users_email_domain ON users ((split_part(email, '@', 2)));  -- ✅ 对 split_part 结果建索引

-- 📌 示例8:全文检索索引(替代 LIKE '%xxx%')
CREATE INDEX idx_articles_content_tsvector ON articles USING GIN (to_tsvector('english', content));

-- 📌 示例9:查看所有索引(调试用)
\di  -- 在 psql 中执行,列出当前模式下所有索引

✅ 团队规范建议:

  • 所有 WHERE、JOIN、ORDER BY 字段必须建索引。
  • JSONB 字段必须使用 GIN 索引,否则查询性能为 0。
  • 使用 EXPLAIN ANALYZE 检查查询是否命中索引。
  • 索引不是越多越好!每个索引都会拖慢写入速度,按需创建。

✅ 4. CREATE CONSTRAINT —— 约束(数据质量的“防火墙”)

理念:让数据库帮你校验数据,而不是让 Java 代码兜底。

-- 📌 示例1:主键约束(自动创建索引)
CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,  -- ✅ 自动创建唯一索引
    sku VARCHAR(50) UNIQUE NOT NULL  -- ✅ 自动创建唯一索引
);

-- 📌 示例2:外键约束(保证引用完整性)
CREATE TABLE order_items (
    id BIGSERIAL PRIMARY KEY,
    order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
    product_id BIGINT NOT NULL REFERENCES products(id) ON DELETE RESTRICT,
    quantity INTEGER CHECK (quantity > 0)  -- ✅ 数量必须大于0
);

-- 📌 示例3:检查约束(业务规则)
ALTER TABLE users ADD CONSTRAINT chk_email_domain CHECK (email LIKE '%@company.com' OR email LIKE '%@client.com');
ALTER TABLE products ADD CONSTRAINT chk_price_positive CHECK (price > 0 AND price < 1000000);

-- 📌 示例4:非空约束(避免空值)
ALTER TABLE users ALTER COLUMN email SET NOT NULL;

-- 📌 示例5:唯一约束(避免重复)
ALTER TABLE users ADD CONSTRAINT uk_users_phone UNIQUE (phone);

-- 📌 示例6:删除约束(谨慎!)
ALTER TABLE users DROP CONSTRAINT chk_email_domain;

-- 📌 示例7:命名约束(推荐!便于管理)
-- ✅ 推荐:显式命名,便于识别和删除
ALTER TABLE users ADD CONSTRAINT users_email_unique UNIQUE (email);

-- ✅ 不推荐:让系统自动生成名字(如 users_email_key),难定位

✅ 团队规范建议:

  • 所有业务规则(金额>0、状态枚举、邮箱格式)必须在数据库层约束。
  • 禁止依赖 Java 层 @Valid 或 @NotNull 做唯一性校验——数据库才是最终防线。
  • 使用 CHECK 约束代替 Java 中的 if (status != "active") throw ...。

✅ 5. CREATE VIEW 与 CREATE MATERIALIZED VIEW —— 查询封装与性能优化

视图:虚拟表,每次查询实时计算。
物化视图:物理存储结果,可定时刷新,适合复杂聚合。

-- 📌 示例1:创建普通视图(简化复杂查询)
CREATE VIEW user_order_summary AS
SELECT
    u.id AS user_id,
    u.username,
    COUNT(o.id) AS order_count,
    SUM(o.total_amount) AS total_spent,
    MAX(o.created_at) AS last_order_at
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.status = 'paid'
GROUP BY u.id, u.username;

-- ✅ 使用:SELECT * FROM user_order_summary WHERE user_id = 1001;

-- 📌 示例2:创建物化视图(适合报表、统计)
CREATE MATERIALIZED VIEW monthly_sales_summary AS
SELECT
    DATE_TRUNC('month', o.created_at) AS month,
    COUNT(*) AS order_count,
    SUM(o.total_amount) AS total_revenue,
    COUNT(DISTINCT o.user_id) AS new_customers
FROM orders o
WHERE o.status = 'paid'
GROUP BY DATE_TRUNC('month', o.created_at)
ORDER BY month DESC;

-- ✅ 刷新物化视图(每天凌晨执行)
REFRESH MATERIALIZED VIEW CONCURRENTLY monthly_sales_summary;

-- ✅ 为物化视图创建索引
CREATE INDEX idx_monthly_sales_month ON monthly_sales_summary (month);

-- 📌 示例3:带安全性的视图(限制访问字段)
CREATE VIEW public_user_info AS
SELECT id, username, email, created_at
FROM users
WHERE status = 'active';
-- ✅ Java 服务只查询此视图,无法访问 password_hash、metadata

✅ 团队规范建议:

  • 复杂报表、多表关联查询优先用视图封装,Java 层直接 SELECT * FROM view。
  • 物化视图用于“数据变化不频繁、查询频率高”的场景(如每日统计)。
  • 使用 REFRESH MATERIALIZED VIEW CONCURRENTLY 避免锁表。

✅ 6. CREATE SEQUENCE —— 自增序列(高级场景)

BIGSERIAL 是语法糖,本质是 BIGINT + SEQUENCE。
当你需要控制步长、缓存、循环时,手动创建序列。

-- 📌 示例:创建自定义序列(用于订单号前缀)
CREATE SEQUENCE order_seq
    START WITH 1000000
    INCREMENT BY 1
    MINVALUE 1000000
    MAXVALUE 9999999
    CACHE 100;  -- ✅ 缓存100个值,提升性能,避免频繁读取磁盘

-- ✅ 使用:在插入时调用 nextval
INSERT INTO orders (order_no, user_id, total_amount)
VALUES (
    'ORD-' || nextval('order_seq'),  -- ✅ 生成如 ORD-1000001
    1001,
    299.90
);

-- ✅ 查看当前值
SELECT currval('order_seq');

-- ✅ 重置序列(仅用于测试)
ALTER SEQUENCE order_seq RESTART WITH 1000000;

✅ 团队规范建议:

  • 一般场景用 BIGSERIAL 即可。
  • 需要自定义格式 ID(如 INV-2025-0001)时,用 SEQUENCE + nextval。
  • 避免在高并发下使用 currval(),可能导致竞争。

✅ 7. CREATE SCHEMA —— 模式管理(微服务/多模块隔离)

Schema 是数据库中的“命名空间”,用于隔离不同业务模块。

-- 📌 示例:为订单模块创建独立模式
CREATE SCHEMA IF NOT EXISTS order_module;

-- ✅ 在该模式下创建表
CREATE TABLE order_module.orders (
    id BIGSERIAL PRIMARY KEY,
    order_no VARCHAR(50) UNIQUE NOT NULL
);

-- ✅ 授权应用用户访问该模式
GRANT USAGE ON SCHEMA order_module TO app_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA order_module TO app_user;

-- ✅ 查询时需指定模式
SELECT * FROM order_module.orders;

-- ✅ 设置默认模式(连接时指定)
SET search_path TO order_module, public;

✅ 团队规范建议:

  • 微服务架构下,每个服务使用独立 Schema,避免表名冲突。
  • 多租户系统可用 Schema 实现租户隔离(每个租户一个 Schema)。
  • Spring Boot 中通过 spring.datasource.schema 指定默认 Schema。

四、DDL 企业级最佳实践总结(Java 团队必须遵守)

原则说明推荐做法
✅ 所有 DDL 必须版本化禁止手动执行使用 Flyway/Liquibase,脚本命名:V1__create_users.sql
✅ 所有表必须标准化统一结构,降低认知成本id、uuid、created_at、updated_at、status、metadata
✅ 索引必须显式创建并命名性能命脉idx_表名_字段名,JSONB 用 GIN,时间用 B-Tree
✅ 约束必须在数据库层定义数据质量第一道防线CHECK、FOREIGN KEY、UNIQUE、NOT NULL
✅ 禁止物理删除数据可追溯用 status = 'deleted' 替代 DELETE
✅ JSONB 用于动态字段替代“加字段”存储配置、扩展属性,支持索引
✅ 物化视图用于聚合报表减少 Java 计算REFRESH MATERIALIZED VIEW CONCURRENTLY
✅ 使用 Schema 隔离模块多服务/多租户CREATE SCHEMA order_module
✅ 注释是团队语言他人能看懂COMMENT ON TABLE / COLUMN 必须写

五、附录:Flyway DDL 脚本模板(可直接复用)

V1__init_schema.sql

-- 创建用户表
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    uuid UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password_hash TEXT NOT NULL,
    status VARCHAR(20) DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'banned', 'deleted')),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    metadata JSONB DEFAULT '{}'::JSONB,
    phone VARCHAR(20) NULL
);

COMMENT ON TABLE users IS '系统用户主表';
COMMENT ON COLUMN users.uuid IS '业务主键,分布式唯一标识';
COMMENT ON COLUMN users.metadata IS 'JSONB格式用户配置,如 {"theme":"dark", "lang":"zh"}';

CREATE INDEX idx_users_email ON users (email);
CREATE INDEX idx_users_status ON users (status);
CREATE INDEX idx_users_metadata ON users USING GIN (metadata);
CREATE INDEX idx_users_created_at ON users (created_at DESC);

V2__add_avatar_url.sql

-- 添加头像字段(兼容旧数据)
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(255) NULL;
COMMENT ON COLUMN users.avatar_url IS '用户头像URL,支持CDN';

✅ 结语:DDL 不是“建表语句”,而是团队的数据契约

你写的每一条 CREATE TABLE、CREATE INDEX、ALTER COLUMN,
都是在为未来 3 年的系统稳定、性能、可维护性打地基。

一个规范的 DDL 设计,胜过 100 个 Java 单元测试。


📌 下一步行动建议:

  1. 将本文档作为团队《数据库设计规范》的核心章节。
  2. 在 GitLab 中创建 db/ddl/ 目录,存放所有 Flyway 脚本。
  3. 在代码审查(Code Review)中,强制检查 DDL 是否符合本规范。
  4. 组织一次“DDL 最佳实践”内部培训,用本文档 + 示例现场演练。
PostgreSQL实现SHOW CREATE TABLE功能:系统目录查询与DDL重构 在数据库管理与开发中,元数据查询是理解表结构、进行数据迁移和系统维护的基础操作。通过查询系统目录表,可以获取数据库对象的完整定义信息,其原理是利用数据库内置的信息模式(information_schema)和系统表(如pg_class、pg_attribute)存储的元数据。这项技术的核心价值在于提升数据库运维效率,实现自动化脚本生成和结构对比。在PostgreSQL环境中,虽然原生未提供类似MySQL的SHOW CREATE TABLE命令,但通过PL/pgSQL函数整合系统表查询,能够重构出完整的CRE 阅读详情

相关推荐

从PostgreSQL DDL到M-Schema:一个Python脚本搞定,让你的XiYanSQL模型准确率飙升

本文介绍了如何通过Python脚本将PostgreSQL DDL转换为M-Schema,显著提升XiYanSQL模型在文本生成SQL任务中的准确率。M-Schema通过去技术化、语义显式化和结构标准化,优化了数据库描述,使模型生成的SQL语句更准确、逻辑更清晰。文章还提供了转换脚本的关键组件解析、实战效果对比及集成到XiYanSQL工作流的完整方案。

weixin_26950847的博客 225

PostgreSQL数据库序列的DDL获取和细节处理

PostgreSQL数据库序列的DDL获取和细节处理

SUOYUEのBLOG 2187

Excel转PostgreSQL导入实战:从CSV中转到可分析数据库表

CSV文件是结构化数据在表格工具与关系型数据库之间迁移的基础媒介,其纯文本、无格式、易校验的特性,使其成为Excel等电子表格导入PostgreSQL等SQL数据库最可靠中转格式。理解CSV编码(UTF-8)、换行符(LF/CRLF)、BOM头、引号转义等底层规范,是避免乱码、截断、列错位等导入失败的关键;而PostgreSQL的COPY命令凭借原生支持RFC 4180解析、高吞吐与强可控性,显著优于GUI导入或直连方案。该流程不仅解决数据落库问题,更支撑后续索引优化、CHECK约束校验、JOIN关联分析等

weixin_34008784的博客 359

PostgreSQL入门基本语法之DDL-(table)

目录 前言 4、表对象操作 4.1 创建表 4.1.1 语法 4.1.2 常用例子 4.2 修改表 4.2.1 语法 4.2.2 常用例子 4.3 删除表 4.3.1 语法 4.3.2 常用例子 5、表数据操作 4.1 插入数据 4.1.1 语法 5.1.2 常用例子 5.2 更新数据 5.2.1 语法 5.2.2 常用例子 5.3 删除数据 5.3....

qq_39727113的博客 2343

PostgreSQL的DDL提取函数(ddlx)

PostgreSQL的DDL提取函数(ddlx)-源码

Reactor 响应式编程(第一篇:Reactor核心)

响应式:响应式编程: 全异步、消息、事件回调默认还是用当前线程,生成整个流、发布流、流操作.log();//只要不指定线程池,默认发布者用的线程就是订阅者的线程;

moments的博客 1571

[PostgreSQL]: 常用DDL

[PostgreSQL]: 常用DDL1. 数据库1.1 创建数据库1.2 删除数据库2. 表2.1 创建表2.2 删除表2.3 修改表2.3.1 修改表名称2.4 表注释3. 栏位3.1 创建栏位3.2 添加主键3.3 删除栏位3.4 修改栏位3.4.1 修改栏位名称3.4.2 修改栏位类型3.4.3 设置非空约束3.4.4 移除非空约束3.4.5 设置 unique 约束3.4.6 移除 unique 约束3.4.7 设置默认值3.4.8 移除默认值3.5 栏位注释4. 视图4.1 创建视图4.2 删除

qq_35024865的博客 1650

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文深度解析了青龙人形机器人硬件平台的设计全流程,从需求分析、构型设计到核心系统实现。文章详细阐述了其43个自由度的仿生构型、高动态性下肢设计、灵巧作业系统以及分布式控制架构,并探讨了旋转关节与直线关节等关键技术选型,为开发者提供了从理论到实践的完整硬件设计指南。

weixin_29248313的博客 380

PostgreSQL学习笔记(上)

PostgreSQL学习笔记(上)

YIYIYI 2041

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案

本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。

weixin_29240711的博客 976

Halcon棋盘格畸变矫正

通常我们使用的相机都是带有一定的畸变的,只是畸变的大小不同。对于我们常见的测量项目来说,对测量精度的要求很高,通常从相机镜头上进行优化,但是即使镜头优化或者成本原因,造成图像仍有一定的畸变时,我们就可是使用棋盘格标定板,进行畸变矫正。

m0_51559565的博客 3395

postgresql常见的DDL和DML操作

postgresql基本操作 ## 创建数据库,默认模板是template1 create database db_name; ## 重命名数据库 alter database db_name to new_db_name; ## 删除数据库 drop database db_name; (如果还有用户连接在这个数据库上,将无法删除该数据库) ##[为某个用户]创建模式 create schema sm_name [authorization user_name]; ##修改模式名称和属主 alte

归来仍少年 1916

ESXi 6.7升级17700523补丁全流程:从下载到验证的保姆级教程

本文提供ESXi 6.7升级17700523补丁的完整流程指南,涵盖从下载、上传到验证的详细步骤。通过SSH命令和vSphere Client操作,确保系统管理员能够安全高效地完成补丁升级,提升虚拟化环境的安全性和稳定性。

linux6sysadmin的博客 839

PostgreSQL 其他常用 SQL 操作深度详解文档

PostgreSQL高级SQL操作指南(Java开发者必备) 摘要:本文为Java开发者提供PostgreSQL五大标准SQL分类外的9个关键高级操作,涵盖序列管理、函数/触发器、递归CTE查询等核心功能。通过标准化示例演示如何实现自动ID生成、业务逻辑下沉、树形结构处理等企业级需求,强调性能优化与团队规范。文档采用清晰中文注释,所有示例可直接用于生产环境,帮助开发者从基础使用进阶到数据库精通,构建高性能、可靠的数据架构。特别针对Spring Boot团队提供最佳实践建议,如自动维护字段、复杂聚合下沉等技术

python15397的博客 932

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

RAG 提示词工程最佳实践

虽然目前网络上关于提示工程的相关资料已经多如牛毛,然而 RAG (检索增强生成) 任务中提示工程如何进行的资料相对而言却较少。不少朋友之前也热烈的讨论过 RAG 场景下提示词的运用,因此 Zen 禅与计算机程序设计艺术 特别推出 RAG 任务下的提示词实践经验系列分享。RAG 是检索增强生成(Retrieval Augmented Generation)的简称,是当前最火热的企业级LLM应用方案。

AI天才研究院 2011

PostgreSQL 元数据查看与诊断操作深度详解文档

PostgreSQL 元数据查看与诊断命令速查指南(150字摘要) 本文为Java后端团队提供PostgreSQL核心元数据操作手册,涵盖16项高频命令。通过\l查看数据库、\d+分析表结构、\di检查索引等操作,开发者能快速定位问题、验证设计。文档采用SQL+psql双模式,每条命令附带生产级使用建议,如Schema隔离、权限检查等最佳实践。特别推荐\dt+查看表大小和注释,以及information_schema标准化查询,帮助团队实现"数据库可视化",减少沟通成本,提升调试效率。适

python15397的博客 961

11、系统稳定性分析与李雅普诺夫函数的应用

本文深入探讨了李雅普诺夫函数在系统稳定性分析中的核心作用,重点介绍了时变与时不变系统的稳定性判据差异,以及巴尔巴拉特引理在处理非自治系统中的应用。文章还阐述了正线性系统与严格正实传递函数的性质及其在非线性控制系统中的重要性,并展示了李雅普诺夫函数在评估主导时间常数和设计快速干扰抑制控制策略方面的实际应用。通过具体示例和流程图,系统地总结了李雅普诺夫方法在稳定性分析、性能评估与控制器设计中的多维度价值,同时指出了当前挑战与未来发展方向。

Jerry的专栏 93

PostgreSQL详解

PostgreSQL是一种开源的对象关系型数据库系统,它使用并扩展了SQL语言,同时添加了许多安全、存储、索引以及查询方面的功能。

qq_60219215的博客 1110

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

PostgreSQL与MySQL操作对比:从DDL到DCL的语法差异详解

本文详细对比了PostgreSQL与MySQL在DDL、DML、DCL等核心操作上的语法差异与设计哲学。通过实战迁移指南,深入解析了PostgreSQL在数据类型、事务一致性、扩展性及高级特性(如JSONB、窗口函数)方面的优势,帮助开发者从MySQL平滑过渡,并掌握PostgreSQL的安装、配置与性能优化等关键操作指南。

2w3e4r5t6y的博客 612

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PostgreSQL 复制集深度解析:default、default_insert_only 与 ddl_sql 的区别与用法

在 Spock 逻辑多主复制方案中,**复制集(Replication Set)**是控制数据流向的"交通规则":它决定了哪些表参与复制、哪些操作(INSERT / UPDATE / DELETE / TRUNCATE)会被复制。安装 Spock 后会自动创建三个内置复制集——`default`、`default_insert_only` 和 `ddl_sql`。很多新手在配置 PostgreSQ

gitblog_00537的博客 345

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

PostgreSQL DBA必备:自制pg_get*ddl系列函数全解析

数据库日常运维中,结构定义的管理往往比数据本身更考验DBA的功底。当需要快速获取某张表、某个函数或整个schema的完整定义时,若依赖手工翻查系统目录或临时拼SQL,不仅效率低下,还容易遗漏对象间的依赖关系。基于PostgreSQL自带的pg_get函数族,我们可以扩展出一套覆盖表、索引、触发器、视图等对象的完整DDL导出工具。其核心原理是深度解析pg_class、pg_attribute、pg_constraint等系统表,并正确处理默认值、标识符引用和依赖排序。这套能力的技术价值在于将结构备份、环境同步

weixin_34090562的博客 209

PostgreSQL数据库建模终极指南:pgModeler完整解决方案深度解析

在当今数据驱动的时代,PostgreSQL作为最先进的开源关系数据库系统,其复杂的数据库设计需求催生了专业的可视化建模工具。**pgModeler**作为专为PostgreSQL生态系统设计的开源数据库建模平台,彻底改变了传统SQL手动编写的工作流程。本文将深入解析pgModeler的技术架构、核心功能和实际应用场景,帮助你掌握这款强大的数据库设计工具。 ## 传统数据库设计的架构困境与技术挑战

gitblog_00690的博客 243

pgAdmin4数据字典生成:自动化文档与ER图导出

在数据库管理工作中,手动维护数据字典和实体关系图(ER图)常常耗费大量时间且容易出错。作为PostgreSQL的现代Web管理工具,pgAdmin4提供了强大的自动化功能,能够轻松生成专业的数据字典文档和可视化ER图。本文将详细介绍如何利用pgAdmin4的ERD Tool(实体关系图工具)和相关功能,实现数据库文档的自动化生成与导出。 ## ERD Tool简介:可视化数据库结构 pgAdm...

gitblog_00700的博客 631

为什么PostgreSQL能登顶?深度解析其超越MySQL的技术内核

其强大的、基于成本的优化器(CBO)非常擅长处理复杂的、多表关联的查询。对于JSONB文档的查询,GIN索引的效率极高,这是PostgreSQL成为卓越的NoSQL文档数据库的关键。它以其严谨的ACID实现、丰富的数据类型与索引、强大的优化器、无与伦比的可扩展性以及健康开放的开源社区,构建了全方位的技术优势。它是PostGIS地理信息系统的基石。优势总结: PostgreSQL在数据一致性方面做到了“铁笼”级别的防护,其严谨的设计哲学确保了数据的绝对可靠,非常适合金融、政务等对数据准确性要求极高的场景。

qq_25137439的博客 711

drizzle-kit 0.31.0 发布解析:PostgreSQL Enum DDL 改进、esbuild 升级与三项关键 Bug 修复

本文基于 `drizzle-kit` 0.31.0 版本更新日志([changelogs/drizzle-kit/0.31.0.md](https://link.gitcode.com/i/47164e293ca25b1bdaecdffa6cf9a5b3)),深入解析本次版本的两大功能改进与三项 Bug 修复。你将了解到:PostgreSQL 枚举(enum)在"删除枚举值"与"重排枚举值"场景下

gitblog_00813的博客 429
上一篇: PostgreSQL SQL 五大分类详细说明文档(企业级标准版)
下一篇: PostgreSQL DML(数据操作语言)深度详解文档
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值