云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
8.8. 几何类型 8.8.1. 点 8.8.2. 线 8.8.3. 线段 8.8.4. 方框 8.8.5. 路径 8.8.6. 多边形 8.8.7. 圆 几何数据类型表示二维的空间物体。表 8.20展示了PostgreSQL中可以用的几何类型。
8.7. 枚举类型 8.7.1. 枚举类型的声明 8.7.2. 排序 8.7.3. 类型安全性 8.7.4. 实现细节 枚举(enum)类型是由一个静态、值的有序集合构成的数据类型。它们等效于很多编程语言所支持的enum类型。
8.6. 布尔类型 PostgreSQL提供标准的SQL类型boolean,参见表 8.19。boolean可以有多个状态:“true(真)”、“false(假)”和第三种状态“unknown(未知)”,未知状态由SQL空值表示。
8.5. 日期/时间类型 8.5.1. 日期/时间输入 8.5.2. 日期/时间输出 8.5.3. 时区 8.5.4. 间隔输入 8.5.5. 间隔输出 PostgreSQL支持SQL中所有的日期和时间类型,如表 8.9所示。
8.4. 二进制数据类型 8.4.1. bytea的十六进制格式 8.4.2. bytea的逃逸格式 bytea数据类型允许存储二进制串,参见表 8.6。 表 8.6. 二进制数据类型 名字 存储尺寸 描述 bytea 1或4字节外加真正的二进制串 变长二进制串 二进制串是一个八位位组(或字节)的序列。
8.3. 字符类型 表 8.4. 字符类型 名字 描述 character varying(n), varchar(n) 有限制的变长 character(n), char(n) 定长,空格填充 text 无限变长 表 8.4显示了在PostgreSQL里可用的一般用途的字符类型。
8.2. 货币类型 money类型存储固定小数精度的货币数字,参阅表 8.3。小数的精度由数据库的lc_monetary设置决定。表中展示的范围假设有两个小数位。可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式,如'$1,000.00'。
8.1. 数字类型 8.1.1. 整数类型 8.1.2. 任意精度数字 8.1.3. 浮点类型 8.1.4. 序数类型 数字类型由2、4或8字节的整数以及4或8字节的浮点数和可选精度小数组成。
第 7 章 查询 目录 7.1. 概述 7.2. 表表达式 7.2.1. FROM子句 7.2.2. WHERE子句 7.2.3. GROUP BY和HAVING子句 7.2.4. GROUPING SETS、CUBE和ROLLUP 7.
7.8. WITH查询(公共表表达式) 7.8.1. WITH中的SELECT 7.8.2. WITH中的数据修改语句 WITH提供了一种方式来书写在一个大型查询中使用的辅助语句。这些语句通常被称为公共表表达式或CTE,它们可以被看成是定义只在一个查询中存在的临时表。
7.7. VALUES列表 VALUES提供了一种生成“常量表”的方法,它可以被使用在一个查询中而不需要实际在磁盘上创建一个表。语法是: VALUES ( expression [, ...] ) [, ...] 每一个被圆括号包围的表达式列表生成表中的一行。
7.6. LIMIT和OFFSET LIMIT和OFFSET允许你只检索查询剩余部分产生的行的一部分: SELECT select_list FROM table_expression [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ] 如果给出了一个限制计数,那么会返回数量不超过该限制的行(但可能更少些,因为查询本身可能生成的行数就比较少)。
7.5. 行排序 在一个查询生成一个输出表之后(在处理完选择列表之后),还可以选择性地对它进行排序。如果没有选择排序,那么行将以未指定的顺序返回。 这时候的实际顺序将取决于扫描和连接计划类型以及行在磁盘上的顺序,但是肯定不能依赖这些东西。
7.4. 组合查询 两个查询的结果可以用集合操作并、交、差进行组合。语法是 query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 query1和query2都是可以使用以上所有特性的查询。
7.3. 选择列表 7.3.1. 选择列表项 7.3.2. 列标签 7.3.3. DISTINCT 如前面的小节说明的那样, 在SELECT命令里的表表达式构造了一个中间的虚拟表, 方法可能有组合表、视图、消除行、分组等等。
7.2. 表表达式 7.2.1. FROM子句 7.2.2. WHERE子句 7.2.3. GROUP BY和HAVING子句 7.2.4. GROUPING SETS、CUBE和ROLLUP 7.2.5. 窗口函数处理 表表达式计算一个表。
7.1. 概述 从数据库中检索数据的过程或命令叫做查询。在 SQL 里SELECT命令用于指定查询。 SELECT命令的一般语法是 [WITH with_queries] SELECT select_list FROM table_expression [sort_specification] 下面几个小节描述选择列表、表表达式和排序声明的细节。
第 6 章 数据操纵 目录 6.1. 插入数据 6.2. 更新数据 6.3. 删除数据 6.4. 从修改的行中返回数据 前面的章节讨论了如何创建表和其他结构来保存你的数据。现在是时候给表填充数据了。
6.4. 从修改的行中返回数据 有时在修改行的操作过程中获取数据很有用。INSERT、 UPDATE和DELETE命令都有一个支持这个的可选的 RETURNING子句。使用RETURNING 可以避免执行额外的数据库查询来收集数据,并且在否则难以可靠地识别修改的行时尤其有用。
6.3. 删除数据 到目前为止我们已经解释了如何向表中增加数据以及如何改变数据。剩下的是讨论如何删除不再需要的数据。和前面增加数据一样,你也只能从表中整行整行地删除数据。在前面的一节里我们解释了 SQL 不提供直接访问单个行的方法。
6.2. 更新数据 修改已经存储在数据库中的数据的行为叫做更新。你可以更新单个行,也可以更新表中所有的行,还可以更新其中的一部分行。 我们可以独立地更新每个列,而其他的列则不受影响。 要更新现有的行,使用UPDATE命令。
6.1. 插入数据 当一个表被创建后,它不包含数据。在数据库可以有点用之前要做的第一件事就是向里面插入数据。数据在概念上是以每次一行地方式被插入的。你当然可以每次插入多行,但是却没有办法一次插入少于一行的数据。
第 5 章 数据定义 目录 5.1. 表基础 5.2. 默认值 5.3. 约束 5.3.1. 检查约束 5.3.2. 非空约束 5.3.3. 唯一约束 5.3.4. 主键 5.3.5. 外键 5.
5.13. 依赖跟踪 当我们创建一个涉及到很多具有外键约束、视图、触发器、函数等的表的复杂数据库结构时,我们隐式地创建了一张对象之间的依赖关系网。例如,具有一个外键约束的表依赖于它所引用的表。
5.12. 其他数据库对象 表是一个关系型数据库结构中的核心对象,因为它们承载了我们的数据。但是它们并不是数据库中的唯一一种对象。有很多其他种类的对象可以被创建来使得数据的使用和刮泥更加方便或高效。
5.11. 外部数据 PostgreSQL实现了部分的SQL/MED规定,允许我们使用普通SQL查询来访问位于PostgreSQL之外的数据。这种数据被称为外部数据(注意这种用法不要和外键混淆,后者是数据库中的一种约束)。
5.10. 表分区 5.10.1. 概述 5.10.2. 声明式分区 5.10.3. 使用继承的实现 5.10.4. 划分和约束排除 PostgreSQL支持基本的表划分。本小节介绍为何以及怎样把划分实现为数据库设计的一部分。
5.9. 继承 5.9.1. 警告 PostgreSQL实现了表继承,这对数据库设计者来说是一种有用的工具(SQL:1999及其后的版本定义了一种类型继承特性,但和这里介绍的继承有很大的不同)。
5.8. 模式 5.8.1. 创建模式 5.8.2. 公共模式 5.8.3. 模式搜索路径 5.8.4. 模式和权限 5.8.5. 系统目录模式 5.8.6. 惯用法 5.8.7. 可移植性 一个PostgreSQL数据库集簇中包含一个或更多命名的数据库。
5.7. 行安全性策略 除可以通过GRANT使用 SQL 标准的 特权系统之外,表还可以具有 行安全性策略,它针对每一个用户限制哪些行可以 被普通的查询返回或者可以被数据修改命令插入、更新或删除。
5.6. 权限 一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
5.5. 修改表 5.5.1. 增加列 5.5.2. 移除列 5.5.3. 增加约束 5.5.4. 移除约束 5.5.5. 更改列的默认值 5.5.6. 修改列的数据类型 5.5.7. 重命名列 5.5.8. 重命名表 当我们已经创建了一个表并意识到犯了一个错误或者应用需求发生改变时,我们可以移除表并重新创建它。
5.4. 系统列 每一个表都拥有一些由系统隐式定义的系统列。因此,这些列的名字不能像用户定义的列一样使用(注意这种限制与名称是否为关键词没有关系,即便用引号限定一个名称也无法绕过这种限制)。 事实上用户不需要关心这些列,只需要知道它们存在即可。
5.3. 约束 5.3.1. 检查约束 5.3.2. 非空约束 5.3.3. 唯一约束 5.3.4. 主键 5.3.5. 外键 5.3.6. 排他约束 数据类型是一种限制能够存储在表中数据类别的方法。
5.2. 默认值 一个列可以被分配一个默认值。当一个新行被创建且没有为某些列指定值时,这些列将会被它们相应的默认值填充。一个数据操纵命令也可以显式地要求一个列被置为它的默认值,而不需要知道这个值到底是什么(数据操纵命令详见第 6 章)。
5.1. 表基础 关系型数据库中的一个表非常像纸上的一张表:它由行和列组成。列的数量和顺序是固定的,并且每一列拥有一个名字。行的数目是变化的,它反映了在一个给定时刻表中存储的数据量。SQL并不保证表中行的顺序。
第 4 章 SQL语法 目录 4.1. 词法结构 4.1.1. 标识符和关键词 4.1.2. 常量 4.1.3. 操作符 4.1.4. 特殊字符 4.1.5. 注释 4.1.6. 操作符优先级 4.
4.3. 调用函数 4.3.1. 使用位置记号 4.3.2. 使用命名记号 4.3.3. 使用混合记号 PostgreSQL允许带有命名参数的函数被使用位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,因为它让参数和实际参数之间的关联更明显和可靠。
4.2. 值表达式 4.2.1. 列引用 4.2.2. 位置参数 4.2.3. 下标 4.2.4. 域选择 4.2.5. 操作符调用 4.2.6. 函数调用 4.2.7. 聚合表达式 4.2.8. 窗口函数调用 4.2.9. 类型转换 4.2.10. 排序规则表达式 4.2.11. 标量子查询 4.2.12. 数组构造器 4.2.13. 行构造器 4.2.14. 表达式计算规则 值表达式被用于各种各样的环境中,例如在SELECT命令的目标列表中、作为INSERT或UPDATE中的新列值或者若干命令中的搜索条件。
4.1. 词法结构 4.1.1. 标识符和关键词 4.1.2. 常量 4.1.3. 操作符 4.1.4. 特殊字符 4.1.5. 注释 4.1.6. 操作符优先级 SQL输入由一个命令序列组成。
部分 I. 教程 欢迎来到PostgreSQL教程。下面的几章将为那些新接触PostgreSQL、关系数据库概念和 SQL 语言的读者给出一个简单介绍。我们只假定读者拥有关于如何使用计算机的一般知识。
第 3 章 高级特性 目录 3.1. 简介 3.2. 视图 3.3. 外键 3.4. 事务 3.5. 窗口函数 3.6. 继承 3.7. 小结 本文转自PostgreSQL中文社区,原文链接:第 3 章 高级特性
3.7. 小结 PostgreSQL中有很多特性在这个面向SQL新用户的教程中并未触及。有关这些特性的更多详情将在本书的后续部分进行讨论。 如果需要更多介绍材料,请访问 PostgreSQL 官方网站来获得更多资源链接。
3.6. 继承 继承是面向对象数据库中的概念。它展示了数据库设计的新的可能性。 让我们创建两个表:表cities和表capitals。自然地,首都也是城市,所以我们需要有某种方式能够在列举所有城市的时候也隐式地包含首都。
3.5. 窗口函数 一个窗口函数在一系列与当前行有某种关联的表行上执行一种计算。这与一个聚集函数所完成的计算有可比之处。但是窗口函数并不会使多行被聚集成一个单独的输出行,这与通常的非窗口聚集函数不同。
3.4. 事务 事务是所有数据库系统的基础概念。事务最重要的一点是它将多个步骤捆绑成了一个单一的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响。
3.3. 外键 回想第2章中的weather和cities表。考虑以下问题:我们希望确保在cities表中有相应项之前任何人都不能在weather表中插入行。这叫做维持数据的引用完整性。在过分简化的数据库系统中,可以通过先检查cities表中是否有匹配的记录存在,然后决定应该接受还是拒绝即将插入weather表的行。
3.2. 视图 回想一下第 2.6 节中的查询。假设天气记录和城市为止的组合列表对我们的应用有用,但我们又不想每次需要使用它时都敲入整个查询。我们可以在该查询上创建一个视图,这会给该查询一个名字,我们可以像使用一个普通表一样来使用它: CREATE VIEW myview AS SE.
3.1. 简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性,这些特性有助于简化管理和防止数据丢失或损坏。最后,我们还将介绍一些PostgreSQL扩展。
第 2 章 SQL语言 目录 2.1. 引言 2.2. 概念 2.3. 创建一个新表 2.4. 在表中增加行 2.5. 查询一个表 2.6. 在表之间连接 2.7. 聚集函数 2.