PostgreSQL-Tutorial
文章平均质量分 75
本 PostgreSQL 教程将从入门到高级全面教你学习 PostgreSQL
盒马coding
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第20节-触发器-Triggers
摘要:本教程介绍了PostgreSQL触发器的概念及应用。触发器是在表或视图上发生INSERT、UPDATE、DELETE或TRUNCATE事件时自动执行的用户定义函数,常用于日志记录、审计和业务规则验证。触发器包含四个关键组件:触发事件、触发时间(BEFORE/AFTER)、触发函数(可访问特殊变量如TG_OP、NEW和OLD)和触发范围(行级/语句级)。通过示例演示了如何创建触发器来记录产品安全库存变动:首先创建日志表,然后定义触发器函数,最后绑定触发器到表上。当更新产品安全库存时,触发器会自动记录变更原创 2025-10-24 08:11:17 · 816 阅读 · 0 评论 -
第20节-触发器-Event-Triggers
本教程介绍了PostgreSQL事件触发器的使用。事件触发器是数据库级触发器,用于监控和控制DDL操作(如创建、修改表等),而不同于常规的表级触发器。文章详细讲解了如何创建事件触发器(CREATE EVENT TRIGGER),列出了四种可监控的事件类型(ddl_command_start、ddl_command_end等),并提供了实用场景(审计、策略执行等)。通过示例演示了创建日志表、编写触发器函数、启用禁用触发器等操作,还展示了如何限制非管理员执行DDL命令。最后总结了事件触发器的管理语句(ALTER原创 2025-10-24 08:10:40 · 819 阅读 · 0 评论 -
第20节-触发器-Drop-Trigger
本文介绍了PostgreSQL中DROP TRIGGER语句的使用方法。首先概述了语法结构,包括可选参数IF EXISTS、表名指定和级联选项。然后通过实例演示:创建一个防止库存为负的触发器函数prevent_negative_stock(),将其绑定到inventories表作为inventory_stock_check触发器,最后用DROP TRIGGER删除该触发器。该语句能有效管理数据库中的触发器对象。原创 2025-10-23 08:10:46 · 646 阅读 · 0 评论 -
第20节-触发器-Disabling-Triggers
摘要:本教程介绍了PostgreSQL中禁用和启用触发器的操作。通过ALTER TABLE DISABLE TRIGGER语句可禁用指定或所有触发器,适用于批量操作等场景。示例演示了创建价格变更日志触发器后,如何禁用触发器阻止日志记录,以及使用ENABLE TRIGGER重新激活触发器。关键语法包括指定表名和触发器名(或ALL关键字),帮助优化数据库性能并灵活控制触发器行为。原创 2025-10-23 08:10:15 · 592 阅读 · 0 评论 -
第20节-触发器-BEFORE-INSERT-Trigger
摘要:本教程介绍PostgreSQL的BEFORE INSERT触发器,用于在数据插入前自动执行验证函数。触发器通过NEW变量访问待插入行数据,可创建验证逻辑(如库存检查)。示例演示了创建触发器函数验证库存交易,防止负库存。当交易数量超过库存时触发器会抛出异常,有效保障数据完整性。触发器创建包含两个步骤:定义触发器函数和将函数绑定到表的插入操作。这种机制为数据操作提供了可靠的预处理能力。原创 2025-10-22 07:58:34 · 399 阅读 · 0 评论 -
第20节-触发器-AFTER-INSERT-Trigger
摘要:本教程介绍了PostgreSQL中AFTER INSERT触发器的使用方法。触发器会在表执行插入操作后自动调用指定函数。通过NEW变量可访问插入的行数据。创建步骤包括:1) 定义触发器函数,2) 使用CREATE TRIGGER绑定触发器。示例演示了如何通过触发器自动更新库存表:当transactions表插入新记录时,触发器会同步调整inventories表的库存数量,处理缺货时自动创建新记录或报错。这种机制能有效维护数据一致性,适用于需要自动处理业务逻辑的场景。原创 2025-10-22 07:57:58 · 776 阅读 · 0 评论 -
第19节-非规范化数据类型-XML
摘要:本教程介绍PostgreSQL的XML数据类型,用于存储格式正确的XML文档。通过创建xproducts表示范,展示了如何定义XML列、插入XML数据(使用XMLPARSE函数)以及使用xpath函数查询XML内容。教程还演示了将XML值转换为TEXT、DECIMAL等数据类型的方法,并提供了创建函数索引优化XML查询性能的实践方案。PostgreSQL的XML类型相比TEXT类型具有类型安全和内置函数支持的优势,适合需要处理XML数据的应用场景。原创 2025-10-21 07:47:33 · 799 阅读 · 0 评论 -
第19节-非规范化数据类型-JSON
摘要:本教程介绍了PostgreSQL中的JSON数据类型,重点讲解JSONB的用法。内容包括JSON基本结构(对象、数组)和数据类型,对比了JSON与JSONB的存储差异及适用场景。通过创建手机产品表的实例,演示了如何插入和查询JSON数据,包括使用->、->>运算符提取对象值和文本。教程强调JSONB更适合高效查询和存储,推荐在大多数场景中使用。原创 2025-10-21 07:47:00 · 673 阅读 · 0 评论 -
第19节-非规范化数据类型-Enum
PostgreSQL枚举数据类型使用指南 本教程介绍了PostgreSQL枚举数据类型的创建和应用。通过CREATE TYPE语句可定义枚举类型,用于限制列值的可选范围。示例展示了如何创建优先级枚举类型(low/medium/high),建立关联表并执行查询操作。文章还涵盖枚举值的添加(ALTER TYPE)、查询(ENUM_RANGE)和重命名方法,最后对比了枚举与使用外键关联查找表的实现方式,分析了两者在维护性和查询性能上的差异。原创 2025-10-20 22:50:04 · 664 阅读 · 0 评论 -
第19节-非规范化数据类型-Drop-Type
摘要:本教程介绍PostgreSQL中DROP TYPE语句的用法,用于删除用户定义的数据类型。语法支持IF EXISTS避免错误,CASCADE可级联删除依赖对象(如表列),默认RESTRICT会阻止删除有依赖项的类型。通过创建contact和address类型并演示删除过程(包括处理依赖表列的场景),说明实际应用方法。关键提示:使用CASCADE前需谨慎评估,重要数据应提前备份。原创 2025-10-20 22:49:07 · 390 阅读 · 0 评论 -
第19节-非规范化数据类型-Composite-types
摘要:本文介绍了PostgreSQL复合类型的使用方法。复合类型允许将行或记录结构作为数据类型使用,支持创建表列、函数参数和返回类型。通过CREATE TYPE定义复合类型后,可使用ROW()构造复合值,并通过点表示法访问字段。文章详细说明了复合类型的插入、查询、更新和删除操作,并指出复合类型不支持直接字段约束,但可通过创建域类型间接实现。示例展示了仓库位置管理场景中复合类型的应用,包括如何添加字段级约束。原创 2025-10-17 08:10:44 · 1303 阅读 · 0 评论 -
第19节-非规范化数据类型-Cast
摘要:本教程介绍了PostgreSQL中的数据类型转换方法,包括使用CAST()函数和::运算符将字符串、数字、布尔值、日期、数组等转换为目标类型。通过示例展示了各种常见转换场景(如字符串转整数、时间戳转日期等),并特别说明了隐式转换和自定义转换的实现方式。文章还演示了如何结合正则表达式处理表数据,以及处理XML片段时的多重转换技巧。最后简要提及了PostgreSQL的隐式转换功能和自定义类型转换的创建方法。原创 2025-10-17 08:10:07 · 1337 阅读 · 0 评论 -
第19节-非规范化数据类型-Array
摘要:本教程介绍了PostgreSQL数组类型的使用方法,包括定义数组列(如INT[]、TEXT[]),通过ARRAY构造函数或大括号{}插入数据,查询和修改数组元素(基于1的索引),使用ANY运算符搜索数组,以及UNNEST、ARRAY_LENGTH、ARRAY_APPEND等函数操作。还提到可通过GIN索引优化查询性能,并建议对频繁查询的数据考虑使用关系表替代数组。适用于存储小规模同类型数据集合(如产品特征、标签等)。原创 2025-10-16 08:23:21 · 480 阅读 · 0 评论 -
第18节-索引-Unique-index
摘要:本教程介绍了PostgreSQL唯一索引的用法,用于确保表中一列或多列值的唯一性。通过CREATE UNIQUE INDEX语句创建索引后,重复值插入会报错。教程演示了单列和多列索引的创建,比较了唯一索引与主键、唯一约束的区别:主键不允许NULL且每表只能有一个,而唯一索引允许NULL(默认);唯一约束是逻辑规则,PostgreSQL自动为其创建唯一索引。原创 2025-10-16 08:22:41 · 521 阅读 · 0 评论 -
第18节-索引-Unique-index
摘要:本教程介绍了PostgreSQL唯一索引的用法,用于确保表中一列或多列值的唯一性。通过CREATE UNIQUE INDEX语句创建索引,可防止重复值插入。文章演示了单列(如email)和多列(phone+extension)索引的创建与验证,对比了唯一索引与主键、唯一约束的区别。主键不允许NULL而唯一索引允许(默认NULLS DISTINCT),唯一约束是逻辑规则而唯一索引是物理实现。唯一索引是维护数据完整性的有效工具。原创 2025-10-15 08:18:13 · 525 阅读 · 0 评论 -
第18节-索引-Index
摘要:本教程介绍了如何使用PostgreSQL索引提升查询性能。首先展示如何通过psql连接数据库并定位数据存储目录,解释表数据以堆文件形式存储。当查询条件复杂时,全表扫描效率低下,此时可通过创建索引加速查找。索引通过B树结构组织数据,优化查询路径。文章详细演示了创建索引的步骤,并建议使用EXPLAIN ANALYZE分析查询执行计划。最后提到当数据量较小时可能仍采用全表扫描,并通过生成虚拟数据的方法进行性能测试。原创 2025-10-15 08:16:57 · 1208 阅读 · 0 评论 -
第18节-索引-Index-only-Scans
摘要:本教程介绍了PostgreSQL中仅索引扫描(index-only scan)的优化技术。当索引包含查询所需的所有列且行可见性满足条件时,PostgreSQL可以直接从索引获取数据而无需访问表。通过products表示例,演示了创建索引、检查可见性映射(relallvisible为0表示需访问表),以及使用VACUUM ANALYZE提高可见性(relallvisible变为7)的过程。原创 2025-10-14 08:18:39 · 1105 阅读 · 0 评论 -
第18节-索引-Expression-Index
摘要:PostgreSQL 表达式索引允许基于表达式结果而非列值创建索引,提升查询性能。教程演示了如何通过 CREATE INDEX 语法创建表达式索引,包括使用函数(如 LOWER())和数学表达式(如 price * safety_stock)的案例。表达式索引适用于大小写搜索、JSON/数组数据处理等场景,通过 EXPLAIN 验证索引使用情况。关键点:将表达式用括号包裹,适用于频繁计算的查询条件优化。原创 2025-10-14 08:18:00 · 476 阅读 · 0 评论 -
第18节-索引-DROP-INDEX
摘要:本教程介绍了如何使用 PostgreSQL DROP INDEX 语句删除索引。该语句支持 CONCURRENTLY(非阻塞删除)、IF EXISTS(避免不存在索引报错)以及级联选项。基本语法为 DROP INDEX [选项] 索引名,示例演示了创建并删除 products 表索引的过程。通过该语句可有效管理数据库索引结构。原创 2025-10-13 08:07:06 · 706 阅读 · 0 评论 -
第18节-索引-CREATE-INDEX
摘要:本教程介绍了PostgreSQL中CREATE INDEX语句的使用方法,帮助用户为表列创建索引以提高查询性能。基本语法包括可选的索引名、IF NOT EXISTS选项、表名和索引列。PostgreSQL会自动生成索引名(格式:表名_列名_idx)。示例演示了为单列(transactions.type)和组合列(products.safety_stock,gross_weight)创建索引的过程,并展示了如何通过系统表pg_indexes查看已建索引。该语句是优化数据库查询的重要工具。原创 2025-10-13 08:06:28 · 876 阅读 · 0 评论 -
第17节-存储过程-Drop-procedure
本教程介绍了如何使用PostgreSQL的DROP PROCEDURE语句删除存储过程。内容包括:语法说明(含IF EXISTS、参数列表、CASCADE/RESTRICT选项)、多过程删除方法,以及通过创建/删除示例存储过程(add_brand、increase_inventory、receive_product)演示具体操作。重点指出PostgreSQL不跟踪过程间依赖关系,删除被调用的过程会导致调用过程执行失败。摘要总结了删除存储过程的核心要点和注意事项。原创 2025-10-12 09:14:22 · 519 阅读 · 0 评论 -
第17节-存储过程-Create-stored-procedures
本教程介绍了PostgreSQL中CREATE PROCEDURE语句的使用方法。存储过程是预编译SQL语句集,通过CREATE OR REPLACE PROCEDURE语法定义,支持参数传递和多种语言(如SQL、PL/pgSQL)。教程展示了基本存储过程创建示例update_safety_stock,以及执行多语句的update_inventory过程,后者通过BEGIN ATOMIC块确保事务原子性。最后说明了使用CALL语句调用存储过程的方法,并通过事务和库存表验证了操作结果。存储过程能有效封装业务逻原创 2025-10-12 09:13:37 · 346 阅读 · 0 评论 -
第16节-用户定义函数-Drop-functions
本文介绍了PostgreSQL中DROP FUNCTION语句的用法,用于删除用户定义的函数。文章详细说明了语法结构,包括IF EXISTS和CASCADE选项的使用,并通过创建多个函数演示删除操作。重点讲解了如何删除重载函数和一次性删除多个函数的方法。该语句是管理数据库函数的重要工具,但需注意函数依赖关系以避免意外删除。原创 2025-10-11 08:13:26 · 515 阅读 · 0 评论 -
第16节-用户定义函数-Create-functions
摘要:本教程介绍了如何使用PostgreSQL的CREATE FUNCTION语句创建自定义函数。函数可封装复杂逻辑,支持参数传递和返回值定义。基本语法包括函数名、参数、返回类型、函数体(用$$标记)和语言类型(如SQL)。示例展示了三种函数:不返回值的(VOID)、返回单值的(如计算库存总金额)以及返回复合类型(自定义结构)的函数。调用时使用SELECT语句,复合类型结果可通过FROM子句展开字段。用户定义函数增强了代码复用性和数据库功能扩展性。原创 2025-10-11 08:12:56 · 375 阅读 · 0 评论 -
第15节-高级文本搜索-SIMILAR-TO
本教程介绍了PostgreSQL中SIMILAR TO运算符的使用方法,该运算符用于匹配符合正则表达式的字符串。SIMILAR TO要求整个字符串与模式完全匹配,支持_和%通配符,但不将.视为元字符。教程演示了包括正则表达式解析、NOT SIMILAR TO反向匹配以及使用ESCAPE转义特殊字符的示例。通过商品表实例,展示了如何查询包含特定关键词(如"Galaxy"或"iPhone")或排除数字结尾的产品名称。原创 2025-10-10 07:53:55 · 620 阅读 · 0 评论 -
第15节-高级文本搜索-Regular-Expressions
摘要:本教程介绍了如何在PostgreSQL中使用POSIX正则表达式进行文本匹配。内容涵盖字符类(\d,\s,\w等)、锚点(^,$)、量词(,+,?等)、集合范围([],-)和交替(|)等基本语法。PostgreSQL提供~(匹配)、~(不区分大小写匹配)、!~(不匹配)和!~*(不区分大小写不匹配)四种运算符。通过products表示例展示了如何匹配数字模式、特定位置字符、多选分支以及查找不匹配项。PostgreSQL不支持PCRE标准,但POSIX正则表达式已能满足多数文本处理需求。原创 2025-10-10 07:53:12 · 458 阅读 · 0 评论 -
第15节-高级文本搜索-LIKE
摘要:PostgreSQL 的 LIKE 运算符支持在列中搜索特定模式,可使用通配符 %(多个字符)和 _(单个字符)。示例包括查找以"Samsung"开头、以"5"结尾或包含"Pro"的产品名称。ILIKE 运算符支持不区分大小写的搜索,而 NOT 可否定 LIKE 结果。此外,还介绍了使用转义字符处理特殊字符(如100%),以及结合 CASE 表达式对结果进行分组的方法。原创 2025-10-09 08:04:24 · 703 阅读 · 0 评论 -
第15节-高级文本搜索-Full-text-search
PostgreSQL全文搜索教程摘要:本文介绍了PostgreSQL的全文搜索功能,包括tsvector和tsquery两种专用数据类型。tsvector存储规范化词位并支持位置信息和权重标记,tsquery支持布尔运算符、短语搜索和分组。通过匹配运算符(@@)实现文本匹配,并提供创建GIN索引优化搜索性能的示例。教程包含基础搜索、AND/OR/NOT运算符应用及短语搜索等实用案例,帮助用户高效实现复杂文本查询功能。原创 2025-10-09 08:03:39 · 1246 阅读 · 0 评论 -
第14节-增强表结构-Sequence
摘要:本文介绍了PostgreSQL序列的使用方法。序列是用于生成唯一整数的数据库对象,通过CREATE SEQUENCE语句创建,可自定义起始值、步长、循环等属性。PostgreSQL提供nextval()、currval()等函数操作序列值,并支持将序列与表列关联实现自动编号。文章演示了升序/降序序列的创建、与表列的绑定以及序列删除操作,最后介绍了查看所有序列的方法。序列是PostgreSQL中实现自增主键和唯一标识的高效工具。原创 2025-10-08 08:27:22 · 1129 阅读 · 0 评论 -
第14节-增强表结构-Renaming-tables
摘要:本文介绍了在PostgreSQL中使用ALTER TABLE RENAME TO语句重命名表的方法。语法为ALTER TABLE table_name RENAME TO new_table,可使用IF EXISTS避免表不存在的错误。重命名会自动更新依赖对象(如视图、外键)。示例演示了创建表、重命名表及验证过程。该语句是修改表名的标准方式。原创 2025-10-08 08:26:33 · 715 阅读 · 0 评论 -
第14节-增强表结构-Renaming-columns
摘要:本文介绍了PostgreSQL中重命名表列的ALTER TABLE RENAME COLUMN语句用法。内容包括基本语法、重命名视图引用列的实现方法,以及通过自定义函数实现"如果存在则重命名"的功能。文章通过创建示例表sales_returns和视图sales_return_reports,演示了重命名列的实际操作步骤和验证方法,同时指出PostgreSQL会自动更新依赖对象中的列名,但需要手动更新应用代码。原创 2025-10-06 09:40:11 · 673 阅读 · 0 评论 -
第14节-增强表结构-Identity-Column
摘要:PostgreSQL 身份列通过隐式序列自动生成唯一整数,简化主键管理。支持 GENERATED ALWAYS AS IDENTITY(强制自动生成)和 GENERATED BY DEFAULT AS IDENTITY(允许显式值)两种约束。示例演示了如何创建身份列作为主键或非主键列,以及如何处理显式插入值的情况。PostgreSQL 会自动创建关联序列,并支持自定义序列配置(如起始值和增量)。还介绍了如何将现有列修改为身份列。身份列能有效确保数据唯一性并简化开发。原创 2025-10-06 09:39:35 · 475 阅读 · 0 评论 -
第14节-增强表结构-Dropping-columns
本文介绍了PostgreSQL中删除表列的ALTER TABLE DROP COLUMN语句的使用方法。主要内容包括:基本语法格式、防止报错的IF EXISTS选项、处理依赖关系的CASCADE选项,以及一次删除多列的写法。通过创建供应商表示例,演示了如何删除普通列和存在外键约束、视图依赖的列。最后总结了删除单列和多列的操作要点,强调CASCADE选项可同时删除依赖对象。该功能可用于优化数据库结构,减少存储开销。原创 2025-10-06 09:38:57 · 359 阅读 · 0 评论 -
第14节-增强表结构-ALTER-TABLE
摘要:本教程介绍了PostgreSQL中ALTER TABLE语句的用法,用于修改表结构。主要内容包括:重命名表/列、添加/删除列、更改列数据类型、添加约束(NOT NULL、CHECK、DEFAULT、UNIQUE)等操作。通过示例演示了如何对产品表进行各种修改,如添加价格列、设置默认值等。该语句是维护数据库结构的重要工具,支持多种表结构调整需求。原创 2025-10-05 10:17:21 · 365 阅读 · 0 评论 -
第14节-增强表结构-Adding-columns-to-a-table
摘要:本教程介绍了如何使用 PostgreSQL 的 ALTER TABLE ADD COLUMN 语句为表添加新列。文章详细讲解了基本语法和添加单列/多列的方法,并提供了创建示例表的实践步骤。特别说明了在已有数据的表中添加非空列时需要分三步操作:先添加列、更新数据值、最后添加约束。教程还演示了如何通过 \d 命令查看表结构变化,为数据库表结构调整提供了实用指导。原创 2025-10-05 10:16:42 · 783 阅读 · 0 评论 -
第13节-条件表达式-NULLIF
摘要:本教程介绍了PostgreSQL的NULLIF函数,该函数比较两个表达式,相等时返回NULL,否则返回第一个表达式。通过示例演示了基本用法,包括数据清理(将无效值替换为NULL)和防止除以零错误(将0转为NULL)。NULLIF常用于处理数据验证、计算错误规避等场景,语法为NULLIF(expr1, expr2),要求参数类型兼容。原创 2025-10-05 10:16:07 · 786 阅读 · 0 评论 -
第13节-条件表达式-LEAST
摘要:本教程介绍PostgreSQL的LEAST函数,该函数用于从值列表中返回最小值。语法为LEAST(exp1, exp2,...),函数会忽略NULL值(若全为NULL则返回NULL)。示例演示了如何获取数字、字符串、布尔值和日期中的最小值,如LEAST(1,2,3)返回1,LEAST('A','B','C')返回'A'。与SQL标准不同,PostgreSQL的LEAST仅在所有表达式为NULL时才返回NULL。该函数是选择最小值的便捷工具。原创 2025-09-28 08:07:43 · 557 阅读 · 0 评论 -
第13节-条件表达式-GREATEST
摘要:本教程介绍了PostgreSQL的GREATEST函数,用于从值列表中返回最大值。该函数语法为GREATEST(expression1, expression2,...),会忽略NULL值(若所有表达式都为NULL则返回NULL)。示例展示了该函数处理数字、字符串、布尔值和日期的用法,并演示了如何结合表数据计算运费(确保不低于最低费用)。GREATEST函数适用于需要比较多个值并获取最大值的场景,但注意其与SQL标准在处理NULL值时的差异。(150字)原创 2025-09-28 08:07:08 · 538 阅读 · 0 评论 -
第13节-条件表达式-COALESCE
摘要:本文介绍了PostgreSQL中的COALESCE函数,用于处理NULL值。该函数返回参数列表中第一个非NULL值,若全为NULL则返回NULL。通过profiles表示例,展示了如何用COALESCE将NULL替换为"N/A",以及优先选择工作电话或家庭电话的场景。最后总结了该函数的核心用途——获取第一个非空参数。原创 2025-09-27 09:38:29 · 519 阅读 · 0 评论 -
第13节-条件表达式-CASE-expression
本文介绍了PostgreSQL中CASE表达式的用法。CASE表达式允许在查询中执行条件判断,类似于编程语言的if-else语句。文章详细讲解了两种语法形式:条件判断式和简单匹配式,并通过库存管理示例演示了如何根据产品数量设置库存级别,以及如何转换交易类型描述。CASE表达式支持多条件判断,可选择是否包含ELSE子句,是增强SQL查询功能的重要工具。原创 2025-09-27 09:33:19 · 531 阅读 · 0 评论
分享