PostgreSQL学习手册
- 格式:doc
- 大小:394.01 KB
- 文档页数:21
PostgreSQL学习⼿册(数据库维护)⼀、恢复磁盘空间:在PostgreSQL中,使⽤delete和update语句删除或更新的数据⾏并没有被实际删除,⽽只是在旧版本数据⾏的物理地址上将该⾏的状态置为已删除或已过期。
因此当数据表中的数据变化极为频繁时,那么在⼀段时间之后该表所占⽤的空间将会变得很⼤,然⽽数据量却可能变化不⼤。
要解决该问题,需要定期对数据变化频繁的数据表执⾏VACUUM操作。
VACUUM命令存在两种形式,VACUUM和VACUUM FULL,它们之间的区别见如下表格:⽆VACUUM VACUUM VACUUM FULL删除⼤量数据之后只是将删除数据的状态置为已删除,该空间不能记录被重新使⽤。
如果删除的记录位于表的末端,其所占⽤的空间将会被物理释放并归还操作系统。
如果不是末端数据,该命令会将指定表或索引中被删除数据所占⽤空间重新置为可⽤状态,那么在今后有新数据插⼊时,将优先使⽤该空间,直到所有被重⽤的空间⽤完时,再考虑使⽤新增的磁盘页⾯。
不论被删除的数据是否处于数据表的末端,这些数据所占⽤的空间都将被物理的释放并归还于操作系统。
之后再有新数据插⼊时,将分配新的磁盘页⾯以供使⽤。
执⾏效率由于只是状态置为操作,因此效率较⾼。
在当前版本的PostgreSQL(v9.1)中,该命令会为指定的表或索引重新⽣成⼀个数据⽂件,并将原有⽂件中可⽤的数据导⼊到新⽂件中,之后再删除原来的数据⽂件。
因此在导⼊过程中,要求当前磁盘有更多的空间可⽤于此操作。
由此可见,该命令的执⾏效率相对较低。
被删除的数据所占⽤的物理空间是否被重新规划给操作系统。
不会不会会在执⾏VACUUM命令时,是否可以并发执⾏针对该表的其他操作。
由于该操作是共享锁,因此可以与其他操作并⾏进⾏。
由于该操作需要在指定的表上应⽤排它锁,因此在执⾏该操作期间,任何基于该表的操作都将被挂起,知道该操作完成。
推荐使⽤⽅式在进⾏数据清空是,可以使⽤truncate操作,因为该操作将会物理的清空数据表,并将其所占⽤的空间直接归还于操作系统。
postgresql教程PostgreSQL是一个开源的关系数据库管理系统(RDBMS),它的目标是成为最先进的开源数据库,并支持许多标准SQL 功能以及一些不同的高级功能。
本教程将向您介绍PostgreSQL的基本概念和用法。
我们将从安装和设置开始,然后逐步深入了解表、视图、索引、事务和查询等主题。
第一部分:安装和设置在本部分中,我们将向您介绍如何下载、安装和设置PostgreSQL数据库。
我们还将介绍一些基本概念和术语,如数据库、表和列。
1. 安装PostgreSQL:在本节中,我们将向您展示如何从官方网站或其他来源下载并安装PostgreSQL。
2. 设置数据库连接:在本节中,我们将介绍如何设置和配置数据库连接,包括创建用户、设置密码和分配权限等内容。
3. 创建数据库和表:在本节中,我们将介绍如何创建数据库和表,并向您展示一些常用的数据类型和约束。
第二部分:表和视图在本部分中,我们将更详细地介绍表格和视图的概念,并向您展示如何使用它们来存储和查询数据。
1. 创建和修改表格:在本节中,我们将介绍如何创建新的表格,并向您展示如何修改和删除现有的表格。
2. 数据类型和约束:在本节中,我们将深入了解不同的数据类型和约束,并向您展示如何使用它们来保证数据的完整性和一致性。
3. 视图和触发器:在本节中,我们将向您展示如何创建和使用视图和触发器,以及如何利用它们来简化复杂的查询和操作。
第三部分:索引和查询优化在本部分中,我们将介绍索引和查询优化的概念,并向您展示如何使用索引来提高查询性能。
1. 索引的概念和类型:在本节中,我们将介绍不同类型的索引,如B-tree、哈希和GiST索引,并向您展示如何创建和使用它们。
2. 查询优化和性能调优:在本节中,我们将介绍一些常见的查询优化技术,如查询计划、索引优化和统计信息收集等。
3. 复杂查询和连接:在本节中,我们将向您展示如何编写复杂的查询,包括多表连接、子查询和聚合等。
tgreSQL学习手册(五) 函数和操作符阿里云携手开源中国众包平台发布百万悬赏项目»一、逻辑操作符:常用的逻辑操作符有:AND、OR和NOT。
其语义与其它编程语言中的逻辑操作符完全相同。
二、比较操作符:下面是PostgreSQL中提供的比较操作符列表:操作符描述<小于>大于<=小于或等于>=大于或等于=等于!=不等于比较操作符可以用于所有可以比较的数据类型。
所有比较操作符都是双目操作符,且返回boolean类型。
除了比较操作符以外,我们还可以使用BETWEEN语句,如:a BETWEEN x AND y 等效于 a >= x AND a <= ya NOT BETWEEN x AND y 等效于 a < x OR a > y三、数学函数和操作符:下面是PostgreSQL中提供的数学操作符列表:操作符描述例子结果+加 2 + 35-减 2 - 3-1*乘 2 * 36/除 4 / 22%模 5 % 41^幂 2.0 ^ 3.08|/平方根|/ 25.05||/立方根||/ 27.03!阶乘 5 !120!!阶乘!! 5120@绝对值@ -5.05&按位AND91 & 1511|按位OR32 | 335#按位XOR17 # 520~按位NOT~1-2<<按位左移 1 << 416>>按位右移8 >> 22按位操作符只能用于整数类型,而其它的操作符可以用于全部数值数据类型。
按位操作符还可以用于位串类型bit和bit varying,下面是PostgreSQL中提供的数学函数列表,需要说明的是,这些函数中有许多都存在多种形式,区别只是参数类型不同。
除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。
函数返回类型描述例子结果abs(x)绝对值abs(-17.4)17.4 cbrt(double)立方根cbrt(27.0)3ceil(double/numeric)不小于参数的最小的整数ceil(-42.8)-42degrees(double) 把弧度转为角度degrees(0.5)28.6478897565412 exp(double/numeric)自然指数exp(1.0) 2.71828182845905 floor(double/numeric)不大于参数的最大整数floor(-42.8)-43ln(double/numeric)自然对数ln(2.0)0.693147180559945 log(double/numeric)10为底的对数log(100.0)2log(b numeric,x numeric)numeric指定底数的对数log(2.0, 64.0) 6.0000000000mod(y, x)取余数mod(9,4)1pi() double"π"常量pi() 3.14159265358979 power(a double, b double)double求a的b次幂power(9.0, 3.0)729power(a numeric, bnumeric)numeric求a的b次幂power(9.0, 3.0)729radians(double)double把角度转为弧度radians(45.0)0.785398163397448random()double 0.0到1.0之间的随机数值random()round(double/numeric)圆整为最接近的整数round(42.4)42round(v numeric, s int)numeric圆整为s位小数数字round(42.438,2)42.44sign(double/numeric)参数的符号(-1,0,+1) sign(-8.4)-1sqrt(double/numeric)平方根sqrt(2.0) 1.4142135623731 trunc(double/numeric)截断(向零靠近)trunc(42.8)42trunc(v numeric, s int)numeric 截断为s小数位置的数字trunc(42.438,2)42.43三角函数列表:函数描述acos(x)反余弦asin(x)反正弦atan(x)反正切atan2(x, y)正切y/x 的反函数cos(x)余弦cot(x)余切sin(x)正弦tan(x)正切四、字符串函数和操作符:下面是PostgreSQL中提供的字符串操作符列表:函数返回类型描述例子结果string || string text字串连接'Post' || 'greSQL'PostgreSQL bit_length(string)int字串里二进制位的个数bit_length('jose')32char_length(string)int字串中的字符个数char_length('jose')4convert(string using conversion_name)text使用指定的转换名字改变编码。
PostgreSQL数据库学习手册之libpq - C 库——介绍(转)[@more@] Chapter 1. libpq - C 库Table of Contents1。
1. 介绍1。
2. 数据库联接函数1.3. 命令执行函数1.3。
1. 主过程1。
3.2. 为包含在 SQL 查询中逃逸字串1.3.3. 逃逸包含在 SQL 查询中的二进制字串1.3.4。
检索 SELECT 的结果信息1.3.5. 检索 SELECT 结果数值1。
3.6. 检索非—SELECT 结果信息1.4。
异步查询处理1.5. 捷径接口1。
6。
异步通知1。
7。
与 COPY 命令相关的函数1.8。
libpq 跟踪函数1。
9。
libpq 控制函数1.10. 环境变量1。
11. 文件1。
12. 线程特性1。
13。
制作 Libpq 程序1。
14。
例子程序1.1. 介绍libpq 是 PostgreSQL的 C 应用程序员的接口. libpq 是一套允许客户程序向 PostgreSQL 后端服务进程发送查询并且获得查询返回的库过程. libpq 同时也是其他几个 PostgreSQL 应用接口下面的引擎,包括 libpq++ (C++), libpgtcl(Tcl),Perl,和 ecpg.所以如果你使用这些软件包, libpq某些方面的特性会对你非常重要.本节末尾有三个小程序显示如何利用 libpq书写程序.在下面目录里面有几个完整的 libpq 应用的例子:src/test/examplessrc/bin/psql使用 libpq 的前端程序必须包括头文件 libpq-fe。
h 并且必须与 libpq 库链接.PostgreSQL数据库学习手册之libpq—C库——-数据库联接函数(转)[@more@]1。
2。
数据库联接函数下面的过程处理与 PostgreSQL 后端服务器联接的事情.一个应用程序一次可以与多个后端建立联接. (这么做的原因之一是访问多于一个数据库.) 每个连接都是用一个从PQconnectdb()或PQsetdbLogin() 获得的PGconn对象表示.注意,这些函数总是返回一个非空的对象指针, 除非存储器少得连个PGconn对象都分配不出来.在把查询发送给联接对象之前,可以调用PQstatus 函数来检查一下联接是否成功.*PQconnectdb 与后端数据库服务器建立一个新的联接.PGconn *PQconnectdb(const char *conninfo)这个过程用从一个字符串 conninfo 来的参数与数据库打开一个新的联接.与下面的PQsetdbLogin()不同的是, 我们可以不必更换函数签名(名字)就可以扩展参数集, 所以我们建议应用程序中使用这个函数或者是它的非阻塞的相似函数 PQconnectStart 和 PQconnectPoll.传入的参数可以为空,表明使用所有缺省的参数,或者可以包含一个或更多个用空白间隔的参数设置.每个参数以关键字 = 数值的形式设置. (要写一个空值或者一个包含空白的值,你可以用一对单引号包围它们,例如, keyword = 'a value' .数值内部的单引号和反斜扛必须用一个反斜扛逃逸,也就是说,'或.) 等号周围的空白是可选的.目前可识别的参数键字是:host要联接的主机(host ).如果主机名以斜扛开头,则它声明使用 Unix 域套接字通讯而不是 TCP/IP 通讯; 该值就是套接字文件所存储的目录.缺省时是与位于 /tmp 里面的 Unix—域套接字联接.hostaddr与之联接的主机的 IP 地址。
PostgreSQL学习⼿册(⽬录)事实上之前有很长⼀段时间都在纠结是否有必要好好学习它,但是始终都没有⼀个很好的理由说服⾃⼰。
甚⾄是直到这个项⽬最终决定选⽤PostgreSQL时,我都没有真正意识到学习它的价值,当时只是想反正和其它数据库差不多,能⽤就⾏了。
然⽽有⼀天晚上,⾃⼰也不知道为什么,躺在床上开始回想整个项⽬的实施过程,想着想着就想到了数据库选型这⼀问题上了。
事情是这样的,最初客户将他们的产品⽬标定位为主打中型规模,同时也要在⼀定程度上⽀持⼩型规模。
鉴于此,我们为他们提供的⽅案是中型规模的数据库选⽤Oracle,⼩型规模的选定MySQL,在经过多轮商谈之后这个⽅案通过了。
然⽽随着项⽬的深⼊,客户突然有⼀天提出,由于成本和市场推⼴等问题,该产品的数据库部分需要进⾏⼀定的调整,调整的结果是中型规模可以同时⽀持Oracle和MySQL,⽽⼩型规模则要同时⽀持MySQL和PostgreSQL,原因⾮常简单,PostgreSQL是纯免费的数据库产品。
听到这个消息之后,我当时就⾮常恼⽕,因为当初为了保证运⾏时效率(国标),我们的数据库访问层是完全基于数据库供应商提供的原始C接⼝开发的,甚⾄都没有考虑ODBC提供的原始C接⼝,以防在转换中失去效率,或是ODBC本⾝为了强调通⽤性⽽不得不牺牲某些数据库的优化特征,如批量插⼊、批量读取等。
最后的结果显⽽易见,客户就是上帝,上帝的意见就是真理,这样我们就不得不基于现有的访问层接⼝⼜重新开发了⼀套⽀持PostgreSQL原⽣C接⼝的驱动。
然⽽随着对PostgreSQL的不断学习,对它的了解也在逐步加深,后来发现它的功能还是⾮常强⼤的,特别是对GIS空间数据的⽀持就更加的吸引我了。
于是就在脑⼦⾥为MySQL和PostgreSQL做了⼀个简单的对⽐和分析,最后得出⼀个结论,相⽐MySQL,PostgreSQL并没有什么刚性的缺点,但是它的纯免费特征确实是MySQL⽆法⽐拟的。
PostgreSQL新⼿⼊门教程⾃从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的⾸选。
本⽂介绍PostgreSQL的安装和基本⽤法,供初次使⽤者上⼿。
以下内容基于Debian操作系统,其他操作系统实在没有精⼒兼顾,但是⼤部分内容应该普遍适⽤。
安装1、⾸先,安装PostgreSQL客户端。
sudo apt-get install postgresql-client然后,安装PostgreSQL服务器。
sudo apt-get install postgresql2、正常情况下,安装完成后,PostgreSQL服务器会⾃动在本机的5432端⼝开启。
如果还想安装图形管理界⾯,可以运⾏下⾯命令,但是本⽂不涉及这⽅⾯内容。
sudo apt-get install pgadmin3添加新⽤户和新数据库1、初次安装后,默认⽣成⼀个名为postgres的数据库和⼀个名为postgres的数据库⽤户。
这⾥需要注意的是,同时还⽣成了⼀个名为postgres的Linux系统⽤户。
下⾯,我们使⽤postgres⽤户,来⽣成其他⽤户和新数据库。
好⼏种⽅法可以达到这个⽬的,这⾥介绍两种。
2、第⼀种⽅法,使⽤PostgreSQL控制台。
⾸先,新建⼀个Linux新⽤户,可以取你想要的名字,这⾥为dbuser。
sudo adduser dbuser然后,切换到postgres⽤户。
sudo su - postgres下⼀步,使⽤psql命令登录PostgreSQL控制台。
psql这时相当于系统⽤户postgres以同名数据库⽤户的⾝份,登录数据库,这是不⽤输⼊密码的。
如果⼀切正常,系统提⽰符会变为”postgres=#”,表⽰这时已经进⼊了数据库控制台。
以下的命令都在控制台内完成。
第⼀件事是使⽤\password命令,为postgres⽤户设置⼀个密码。
\password postgres第⼆件事是创建数据库⽤户dbuser(刚才创建的是Linux系统⽤户),并设置密码。
PostgreSQL基础教学与应用第一章:PostgreSQL简介1.1 PostgreSQL的定义和特点1.2 PostgreSQL在数据库领域的应用价值第二章:PostgreSQL的安装和配置2.1 安装PostgreSQL2.2 配置PostgreSQL第三章:PostgreSQL数据库的基本操作3.1 连接数据库3.2 创建数据库3.3 创建表3.4 插入数据3.5 查询数据3.6 更新数据3.7 删除数据第四章:PostgreSQL数据库的高级操作4.1 约束4.2 索引4.3 视图4.4 存储过程4.5 触发器第五章:PostgreSQL的高可用性5.1 水平扩展5.2 热备份5.3 流复制第六章:PostgreSQL与其他数据库的比较6.1 PostgreSQL与MySQL的比较6.2 PostgreSQL与Oracle的比较第七章:PostgreSQL的应用案例分析7.1 PostgreSQL在电子商务领域的应用7.2 PostgreSQL在大数据处理中的应用7.3 PostgreSQL在地理信息系统中的应用第八章:PostgreSQL的未来发展趋势8.1 PostgreSQL的发展历程8.2 PostgreSQL的未来发展方向第一章:PostgreSQL简介PostgreSQL是一个开源的关系型数据库管理系统,其具有可扩展性、稳定性和安全性等特点。
它被广泛应用于企业级数据库管理和大规模数据处理领域,成为了目前世界上发展最快的开源数据库之一。
第二章:PostgreSQL的安装和配置2.1 安装PostgreSQL要安装PostgreSQL,可以从官方网站上下载最新版本的安装包。
安装过程中需按照提示进行设置和配置,如选择安装路径、创建管理员用户等。
2.2 配置PostgreSQL配置文件中包含了数据库的参数设置,可以根据需求进行修改,如修改监听地址、设置最大连接数等。
第三章:PostgreSQL数据库的基本操作3.1 连接数据库使用命令行工具或可视化工具连接数据库,输入用户名和密码即可进行连接。
PostgreSQL数据库基础教程一、数据库基础知识1.1 数据库的定义和作用数据库是指存储和组织数据的集合,通过数据库可以方便地对数据进行管理和查询。
数据库的作用包括存储数据、保证数据的一致性和完整性、提供数据的安全性和可靠性等。
1.2 关系型数据库和非关系型数据库关系型数据库是指使用关系模型将数据组织成表格的数据库,而非关系型数据库则不局限于表格模型。
PostgreSQL是一种开源的关系型数据库管理系统,具有丰富的功能和灵活性。
1.3 PostgreSQL的特点和优势PostgreSQL是一个功能强大、可扩展性强的数据库管理系统,具有以下特点:- 可靠性:支持事务管理和崩溃恢复机制,保证数据的一致性和可靠性。
- 可移植性:支持跨多个操作系统的安装和使用。
- 扩展性:支持插件式架构,允许用户根据需求添加自定义的功能。
- 多版本并发控制:采用MVCC(多版本并发控制)机制,提供高并发性能。
- 开放性:作为开源软件,PostgreSQL的源代码可以公开查看和修改。
二、安装和配置PostgreSQL2.1 下载和安装PostgreSQL首先,在PostgreSQL官网上下载适合操作系统的安装包,并按照安装向导进行安装。
2.2 配置数据库集群安装完成后,需要进行数据库集群的配置。
可以通过编辑配置文件来为数据库设置参数,如监听地址、端口号、连接数限制等。
2.3 创建用户和数据库PostgreSQL默认使用操作系统的用户名作为数据库的用户名,可以通过以下命令创建一个新的用户,并为其分配权限。
三、数据库操作3.1 登录和退出数据库在命令行中输入`psql -U 用户名 -d 数据库名`可以登录到指定的数据库。
3.2 数据表的创建和删除使用`CREATE TABLE`命令可以创建新的数据表,使用`DROP TABLE`命令可以删除数据表。
3.3 数据表的数据插入和查询使用`INSERT INTO`命令可以向数据表中插入新的数据,使用`SELECT`命令可以查询数据并返回结果集。
PostgreSQL数据库学习手册之日期/时间支持PostgreSQL 使用一个内部的启发式分析器用于所有的日期/时间支持.日期和时间都是以字串形式输入的,然后用一个初步的判断分解为在该数域里能有什么样的信息.每个数域都被解释,并且要么是被赋予一个数字值,要么是忽略,要么是被拒绝.分析器里包含内部的查询表,用于所有文本域,包括月份,星期几,和时区.这份附录包含这些查询表的信息,及描述了分析器用来对时间和日期解码的步骤.A.1. 日期/时间输入解析日期/时间类型都是使用一套通用的过程进行解析的。
日期/时间输入解析1.把输入字串分解为一个个记号,然后把每个记号分成字串,时间,时区,或数字几类。
1.如果一个数字记号包含一个冒号(:),那么这是个时间字串。
包括随后所有的数据位和冒号。
2.如果这个数字记号包含一个划线(-),斜杠(/),或两个或多个点(.),那么他就是个日期字串,可能有一个文本月份。
3.如果这个记号只是数字,那么他要么是个独立的字段,要么是个ISO 8601 连接的日期(比如,19990113 是1999 年一月13 日)或是连接的时间(比如,141516 是14:15:16)。
4.如果记号以一个加号(+)开头或减号(-)开头,那么他要么是个时区,要么就是个特别的字段。
2.如果记号是个文本字串,那么和可能的字串进行匹配。
1.做一次二分表查找,看看这个记号是特别字串(比如,today),日期(比如,Thursday),月份(比如,January),还是个无关痛痒的字(比如,at,on)。
为字段设置数值和位掩码。
比如,为today 设置年,月,日,及为now 这样的还需要设置另外的时,分,秒。
2.如果没有找到,则做一次类似的二分表搜索,找和记号匹配的时区。
3.如果还没有找到,抛出一个错误。
3.记号是个数字或数字字段。
1.如果超过4位数字,而且前面也没有读到其他日期字段,那么就解释成一个"连接的日期"(比如,19990118)。
postgresql中文手册PostgreSQL中文手册概述PostgreSQL是一个功能强大的开源关系型数据库管理系统,它提供了多种高级特性,可以满足各种规模的应用需求。
本文档将为您介绍PostgreSQL的基本概念、使用方法以及高级特性。
第一章:入门指南1.1 安装PostgreSQL本节将指导您如何下载、安装和配置PostgreSQL。
您可以根据不同的操作系统选择适合的安装方法,并了解基本的配置选项。
1.2 数据库连接学习如何连接到PostgreSQL数据库,并使用命令行工具或者图形化界面进行操作。
您将了解如何创建、删除和管理数据库。
1.3 SQL语法PostgreSQL支持标准的SQL语法,并且还提供了许多扩展功能。
本节将介绍常用的SQL语句,包括表的创建、数据的插入、更新和删除,以及查询语句的使用。
第二章:高级特性2.1 事务管理了解PostgreSQL的事务管理功能,包括事务的启动、提交和回滚,并学习如何处理并发访问和锁定。
2.2 索引和性能优化学习如何创建索引以提高查询性能,并了解如何使用EXPLAIN命令来分析查询执行计划。
2.3 触发器和事件管理本节将介绍如何使用触发器来自动化处理某些数据库事件,并学习如何对触发器进行管理和监控。
2.4 备份和恢复学习如何创建数据库的备份,并了解如何恢复数据库的数据。
第三章:高级应用3.1 数据复制本节介绍PostgreSQL的数据复制功能,包括主从复制和逻辑复制。
您将学习如何配置复制服务器,并设置故障转移和负载均衡。
3.2 分区表了解如何使用分区表来提高查询性能和管理大型数据集。
3.3 全文搜索学习如何使用PostgreSQL的全文搜索功能,包括设置搜索引擎和执行高级搜索查询。
3.4 GIS支持了解如何使用PostGIS扩展来处理地理信息系统数据,并学习如何执行GIS查询和空间分析。
结论本文档提供了关于PostgreSQL的全面介绍,包括基本概念、使用方法和高级特性。
PostgreSQL学习⼿册(PLpgSQL过程语⾔)⼀、概述:PL/pgSQL函数在第⼀次被调⽤时,其函数内的源代码(⽂本)将被解析为⼆进制指令树,但是函数内的表达式和SQL命令只有在⾸次⽤到它们的时候,PL/pgSQL解释器才会为其创建⼀个准备好的执⾏规划,随后对该表达式或SQL命令的访问都将使⽤该规划。
如果在⼀个条件语句中,有部分SQL命令或表达式没有被⽤到,那么PL/pgSQL解释器在本次调⽤中将不会为其准备执⾏规划,这样的好处是可以有效地减少为PL/pgSQL函数⾥的语句⽣成分析和执⾏规划的总时间,然⽽缺点是某些表达式或SQL命令中的错误只有在其被执⾏到的时候才能发现。
由于PL/pgSQL在函数⾥为⼀个命令制定了执⾏计划,那么在本次会话中该计划将会被反复使⽤,这样做往往可以得到更好的性能,但是如果你动态修改了相关的数据库对象,那么就有可能产⽣问题,如:CREATE FUNCTION populate() RETURNS integer AS $$DECLARE-- 声明段BEGINPERFORM my_function();END;$$ LANGUAGE plpgsql;在调⽤以上函数时,PERFORM语句的执⾏计划将引⽤my_function对象的OID。
在此之后,如果你重建了my_function函数,那么populate函数将⽆法再找到原有my_function函数的OID。
要解决该问题,可以选择重建populate函数,或者重新登录建⽴新的会话,以使PostgreSQL重新编译该函数。
要想规避此类问题的发⽣,在重建my_function时可以使⽤CREATE OR REPLACE FUNCTION命令。
鉴于以上规则,在PL/pgSQL⾥直接出现的SQL命令必须在每次执⾏时均引⽤相同的表和字段,换句话说,不能将函数的参数⽤作SQL命令的表名或字段名。
如果想绕开该限制,可以考虑使⽤PL/pgSQL中的EXECUTE语句动态地构造命令,由此换来的代价是每次执⾏时都要构造⼀个新的命令计划。
目录PostgreSQL学习手册(数据表) (4)一、表的定义: (4)PostgreSQL学习手册(模式Schema) (9)PostgreSQL学习手册(表的继承和分区) (10)一、表的继承: (10)PostgreSQL学习手册(常用数据类型) (16)一、数值类型: (16)六、数组: (22)PostgreSQL学习手册(函数和操作符<一>) (25)一、逻辑操作符: (25)四、字符串函数和操作符: (27)五、位串函数和操作符: (29)PostgreSQL学习手册(函数和操作符<二>) (30)六、模式匹配: (30)八、时间/日期函数和操作符: (33)PostgreSQL学习手册(函数和操作符<三>) (35)九、序列操作函数: (35)十二、系统信息函数: (38)PostgreSQL学习手册(索引) (42)一、索引的类型: (42)四、唯一索引: (43)PostgreSQL学习手册(事物隔离) (45)PostgreSQL学习手册(性能提升技巧) (46)一、使用EXPLAIN: (46)PostgreSQL学习手册(服务器配置) (50)一、服务器进程的启动和关闭: (50)PostgreSQL学习手册(角色和权限) (52)PostgreSQL学习手册(数据库管理) (54)一、概述: (54)PostgreSQL学习手册(数据库维护) (56)一、恢复磁盘空间: (56)二、更新规划器统计: (57)四、定期重建索引: (59)PostgreSQL学习手册(系统表) (61)一、pg_class: (61)三、pg_attrdef: (63)四、pg_authid: (64)五、pg_auth_members: (64)七、pg_tablespace: (65)十、pg_index: (67)PostgreSQL学习手册(系统视图) (68)一、pg_tables: (68)二、pg_indexes: (68)三、pg_views: (68)四、pg_user: (69)五、pg_roles: (69)六、pg_rules: (69)七、pg_settings: (70)PostgreSQL学习手册(客户端命令<一>) (70)零、口令文件: (70)PostgreSQL学习手册(客户端命令<二>) (75)七、pg_dump: (75)八、pg_restore: (77)PostgreSQL学习手册(SQL语言函数) (83)一、基本概念: (83)PostgreSQL学习手册(PL/pgSQL过程语言) (86)一、概述: (86)PostgreSQL学习手册(数据表)一、表的定义:对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。
PostgreSQL学习⼿册(常⽤数据类型)⼀、数值类型:下⾯是PostgreSQL所⽀持的数值类型的列表和简单说明:名字存储空间描述范围smallint 2 字节⼩范围整数-32768 到 +32767integer 4 字节常⽤的整数-2147483648 到 +2147483647bigint8 字节⼤范围的整数-9223372036854775808 到 9223372036854775807decimal变长⽤户声明精度,精确⽆限制numeric变长⽤户声明精度,精确⽆限制real 4 字节变精度,不精确 6 位⼗进制数字精度double8 字节变精度,不精确15 位⼗进制数字精度serial 4 字节⾃增整数 1 到 +2147483647bigserial8 字节⼤范围的⾃增整数 1 到 92233720368547758071. 整数类型:类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没有⼩数部分的数字。
试图存储超出范围以外的数值将导致⼀个错误。
常⽤的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。
⼀般只有在磁盘空间紧张的时候才使⽤smallint。
⽽只有在integer的范围不够的时候才使⽤bigint,因为前者(integer)绝对快得多。
2. 任意精度数值:类型numeric可以存储最多1000位精度的数字并且准确地进⾏计算。
因此⾮常适合⽤于货币⾦额和其它要求计算准确的数量。
不过,numeric类型上的算术运算⽐整数类型或者浮点数类型要慢很多。
numeric字段的最⼤精度和最⼤⽐例都是可以配置的。
要声明⼀个类型为numeric的字段,你可以⽤下⾯的语法:NUMERIC(precision,scale)⽐如数字23.5141的精度为6,⽽刻度为4。
在⽬前的PostgreSQL版本中,decimal和numeric是等效的。
PostgreSQL学习手册:SQL语言函数第一篇:PostgreSQL学习手册:SQL语言函数PostgreSQL学习手册:SQL语言函数一、基本概念:SQL函数可以包含任意数量的查询,但是函数只返回最后一个查询(必须是SELECT)的结果。
在简单情况下,返回最后一条查询结果的第一行。
如果最后一个查询不返回任何行,那么该函数将返回NULL 值。
如果需要该函数返回最后一条SELECT语句的所有行,可以将函数的返回值定义为集合,即SETOF sometype。
SQL函数的函数体应该是用分号分隔的SQL语句列表,其中最后一条语句之后的分号是可选的。
除非函数声明为返回void,否则最后一条语句必须是SELECT。
事实上,在SQL函数中,不仅可以包含SELECT查询语句,也可以包含INSERT、UPDATE和DELETE等其他标准的SQL语句,但是和事物相关的语句不能包含其中,如BEGIN、COMMIT、ROLLBACK和SAVEPOINT等。
CREATE FUNCTION命令的语法要求函数体写成一个字符串文本。
通常来说,该文本字符串常量使用美元符($$)围住,如:CREATE FUNCTION clean_emp()RETURNS void AS $$DELETE FROM emp WHERE salary < 0;$$ LANGUAGE SQL;最后需要说明的是SQL函数中的参数,PostgreSQL定义$1表示第一个参数,$2为第二个参数并以此类推。
如果参数是复合类型,则可以使用点表示法,即$访问复合类型参数中的name字段。
需要注意的是函数参数只能用作数据值,而不能用于标识符,如:INSERT INTO mytable VALUES($1);--合法INSERT INTO $1 VALUES(42);--不合法(表名属于标示符之一)二、基本类型:最简单的SQL函数可能就是没有参数且返回基本类型的函数了,如:CREATE FUNCTION one()RETURNS integer AS $$SELECT 1 AS result;$$ LANGUAGE SQL;下面的例子声明了基本类型作为函数的参数。
PostgreSQL 学习手册(数据库管理一、概述:数据库可以被看成是SQL 对象(数据库对象的命名集合,通常而言,每个数据库对象(表、函数等只属于一个数据库。
不过对于部分系统表而言,如pg_database,是属于整个集群的。
更准确地说,数据库是模式的集合,而模式包含表、函数等SQL 对象。
因此完整的对象层次应该是这样的:服务器、数据库、模式、表或其他类型的对象。
在与数据库服务器建立连接时,该连接只能与一个数据库形成关联,不允许在一个会话中进行多个数据库的访问。
如以postgres 用户登录,该用户可以访问的缺省数据库为postgres ,在登录后如果执行下面的SQL 语句将会收到PostgreSQL 给出的相关错误信息。
postgres=# SELECT * FROM MyTest."MyUser".testtables;ERROR: cross-database references are not implemented:"otherdb.otheruser.sometable" LINE 1: select * from otherdb.otheruser.sometable在PostgreSQL 中,数据库在物理上是相互隔离的,对它们的访问控制也是在会话层次上进行的。
然而模式只是逻辑上的对象管理结构,是否能访问某个模式的对象是由权限系统来控制的。
执行下面的基于系统表的查询语句可以列出现有的数据库集合。
SELECT datname FROM pg_database;注:psql 应用程序的\l元命令和-l 命令行选项也可以用来列出当前服务器中已有的数据库。
二、创建数据库:在PostgreSQL 服务器上执行下面的SQL 语句可以创建数据库。
CREATE DATABASE db_name;在数据库成功创建之后,当前登录角色将自动成为此新数据库的所有者。
PostgreSQL 建库与使用
Objectives
•创建PostgreSQL数据库
•启动与关闭PostgreSQL数据库
•使用PostgreSQL数据库
创建数据库集簇•数据库集簇初始化流程
--创建目录(以下操作都以postgres用户执行)
mkdir /usr/local/pg12.2/data
--初始化数据库集簇
initdb -D $PGDATA -W --data-checksums #复制时需要
--启动数据库集簇
pg_ctl -D $PGDATA start
postgresql.conf配置文件•vi $PGDATA/postgresql.conf
listen_addresses = ‘*’# 监听所有地址连接
port = 1922 # 监听端口
数据库打开与关闭•数据库打开与关闭
--启动数据库集簇
pg_ctl -D $PGDATA start
--关闭数据库集簇
pg_ctl -D $PGDATA stop
数据库连接•数据库连接与退出
--登录数据库
psql -U postgres
--退出数据库
\q
数据库使用•数据库使用
--登录到数据库后查看帮助
help
--执行pgsql命令
\l
--执行标准sql命令
select * from tab_name;
总结
•创建PostgreSQL数据库
•启动与关闭PostgreSQL数据库
•使用PostgreSQL数据库。
About the T utorialPostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness.PostgreSQL runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows.This tutorial will give you quick start with PostgreSQL and make you comfortable with PostgreSQL programming.AudienceThis tutorial has been prepared for the beginners to help them understand the basic to advanced concepts related to PostgreSQL Database.PrerequisitesBefore you start practicing with various types of examples given in this reference, I'm making an assumption that you are already aware about what is database, especially RDBMS and what is a computer programming language.Copyright & DisclaimerCopyright 2017 by Tutorials Point (I) Pvt. Ltd.All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher.We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of our website or its contents including this tutorial. If you discover any errors on our website or inthistutorial,******************************************T able of ContentsAbout the Tutorial (i)Audience (i)Prerequisites (i)Copyright & Disclaimer (i)Table of Contents (ii)1.PostgreSQL – Overview (1)Brief History (1)Key Features of PostgreSQL (2)Procedural Languages Support (2)2.PostgreSQL – Environment Setup (3)Installing PostgreSQL on Linux/Unix (3)Installing PostgreSQL on Windows (4)Installing PostgreSQL on Mac (7)3.PostgreSQL – Syntax (11)The SQL Statement (11)PostgreSQL SQL commands (11)4.PostgreSQL – Data Type (35)Numeric Types (35)Monetary Types (36)Character Types (36)Binary Data Types (37)Date/Time Types (37)Boolean Type (37)Enumerated Type (38)Geometric Type (38)Network Address Type (38)Bit String Type (39)Text Search Type (39)UUID Type (39)XML Type (39)JSON Type (40)Array Type (40)Composite Types (41)Range Types (42)Object Identifier Types (43)Pseudo Types (43)5.PostgreSQL – CREATE Database (45)Using createdb Command (45)6.PostgreSQL – SELECT Database (48)Database SQL Prompt (48)OS Command Prompt (49)7.PostgreSQL – DROP Database (50)Using dropdb Command (51)8.PostgreSQL – CREATE Table (53)9.PostgreSQL – DROP Table (55)10.PostgreSQL – Schema (56)Syntax to Create Table in Schema (56)Syntax to Drop Schema (57)11.PostgreSQL – INSERT Query (58)12.PostgreSQL – SELECT Query (60)13.PostgreSQL – Operators (62)PostgreSQL Arithmetic Operators (62)PostgreSQL Comparison Operators (64)PostgreSQL Logical Operators (66)PostgreSQL Bit String Operators (69)14.PostgreSQL – Expressions (71)PostgreSQL – Boolean Expressions (71)PostgreSQL – Numeric Expression (72)PostgreSQL – Date Expressions (73)15.PostgreSQL – WHERE Clause (74)16.PostgreSQL – AND & OR Conjunctive Operators (79)The AND Operator (79)The OR Operator (80)17.PostgreSQL – UPDATE Query (82)18.PostgreSQL – DELETE Query (84)19.PostgreSQL – LIKE Clause (86)20.PostgreSQL – LIMIT Clause (89)21.PostgreSQL – ORDER BY Clause (91)22.PostgreSQL – GROUP BY (94)23.PostgreSQL – WITH Clause (97)Recursive WITH (97)24.PostgreSQL – HAVING Clause (101)25.PostgreSQL – DISTINCT Keyword (104)ADVANCED POSTGRESQL (107)26.PostgreSQL – CONSTRAINTS (108)NOT NULL Constraint (108)UNIQUE Constraint (109)PRIMARY KEY Constraint (109)FOREIGN KEY Constraint (110)CHECK Constraint (111)EXCLUSION Constraint (111)Dropping Constraints (112)27.PostgreSQL – JOINS (113)The CROSS JOIN (114)The INNER JOIN (115)The LEFT OUTER JOIN (116)The RIGHT OUTER JOIN (117)The FULL OUTER JOIN (117)28.PostgreSQL – UNIONS Clause (119)The UNION ALL Clause (121)29.PostgreSQL – NULL Values (123)30.PostgreSQL – ALIAS Syntax (126)31.PostgreSQL – TRIGGERS (129)Listing TRIGGERS (132)Dropping TRIGGERS (132)32.PostgreSQL – INDEXES (133)Index Types (133)The DROP INDEX Command (135)When Should Indexes be Avoided? (135)33.PostgreSQL – ALTER TABLE Command (136)34.PostgreSQL – TRUNCATE TABLE Command (139)35.PostgreSQL – VIEWS (140)Creating Views (140)Dropping Views (142)36.PostgreSQL – TRANSACTIONS (143)Transaction Control (143)The COMMIT Command (144)The ROLLBACK Command (144)37.PostgreSQL – LOCKS (146)DeadLocks (146)Advisory Locks (147)38.PostgreSQL – Sub Queries (148)Subqueries with the SELECT Statement (148)Subqueries with the INSERT Statement (149)Subqueries with the UPDATE Statement (150)Subqueries with the DELETE Statement (151)39.PostgreSQL – AUTO INCREMENT (153)40.PostgreSQL – PRIVILEGES (155)41.PostgreSQL – DATE/TIME Functions and Operators (158)42.PostgreSQL – Functions (166)43.PostgreSQL – Useful Functions (168)PostgreSQL – COUNT Function (168)PostgreSQL – MAX Function (169)PostgreSQL – MIN Function (171)PostgreSQL – AVG Function (172)PostgreSQL – SUM Function (173)PostgreSQL – Array Function (174)PostgreSQL – Numeric Function (175)PostgreSQL – STRING Function (185)POSTGRESQL INTERFACES (197)44.PostgreSQL – C/C++ Interface (198)Installation (198)C/C++ Interface APIs (199)Connecting To Database (200)Create a Table (201)INSERT Operation (202)SELECT Operation (204)UPDATE Operation (206)DELETE Operation (208)45.PostgreSQL – JAVA Interface (211)Installation (211)Connecting To Database (211)Create a Table (212)INSERT Operation (213)SELECT Operation (215)UPDATE Operation (217)DELETE Operation (219)46.PostgreSQL – PHP Interface (222)Installation (222)PHP Interface APIs (222)Connecting to Database (224)Create a Table (225)INSERT Operation (226)SELECT Operation (227)UPDATE Operation (228)DELETE Operation (230)47.PostgreSQL – Perl Interface (233)Installation (233)DBI Interface APIs (234)Connecting to Database (235)Create a Table (235)INSERT Operation (236)SELECT Operation (237)UPDATE Operation (239)DELETE Operation (240)48.PostgreSQL – Python Interface (243)Installation (243)Python psycopg2 module APIs (243)Connecting to Database (245)Create a Table (245)INSERT Operation (246)SELECT Operation (247)UPDATE Operation (248)DELETE Operation (249)PostgreSQL 7PostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development phase and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness.This tutorial will give you a quick start with PostgreSQL and make you comfortable with PostgreSQL programming.What is PostgreSQL?PostgreSQL (pronounced as post-gress-Q-L ) is an open source relational database management system (DBMS) developed by a worldwide team of volunteers. PostgreSQL is not controlled by any corporation or other private entity and the source code is available free of charge.A Brief History of PostgreSQLPostgreSQL, originally called Postgres, was created at UCB by a computer science professor named Michael Stonebraker. Stonebraker started Postgres in 1986 as a follow-up project to its predecessor, Ingres, now owned by Computer Associates.1. 1977-1985: A project called INGRES was developed.∙Proof-of-concept for relational databases ∙Established the company Ingres in 1980 ∙ Bought by Computer Associates in 19942. 1986-1994: POSTGRES∙ Development of the concepts in INGRES with a focus on object orientation and the query language - Quel∙The code base of INGRES was not used as a basis for POSTGRES ∙ Commercialized as Illustra (bought by Informix, bought by IBM)3. 1994-1995: Postgres95∙Support for SQL was added in 1994 ∙Released as Postgres95 in 1995 ∙Re-released as PostgreSQL 6.0 in 1996 ∙ Establishment of the PostgreSQL Global Development Team1.PostgreSQLKey Features of PostgreSQLPostgreSQL runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows. It supports text, images, sounds, and video, and includes programming interfaces for C / C++, Java, Perl, Python, Ruby, Tcl and Open Database Connectivity (ODBC).PostgreSQL supports a large part of the SQL standard and offers many modern features including the following:∙Complex SQL queries∙SQL Sub-selects∙Foreign keys∙Trigger∙Views∙Transactions∙Multiversion concurrency control (MVCC)∙Streaming Replication (as of 9.0)∙Hot Standby (as of 9.0)You can check official documentation of PostgreSQL to understand the above-mentioned features. PostgreSQL can be extended by the user in many ways. For example by adding new: ∙Data types∙Functions∙Operators∙Aggregate functions∙Index methodsProcedural Languages SupportPostgreSQL supports four standard procedural languages, which allows the users to write their own code in any of the languages and it can be executed by PostgreSQL database server. These procedural languages are - PL/pgSQL, PL/Tcl, PL/Perl and PL/Python. Besides, other non-standard procedural languages like PL/PHP, PL/V8, PL/Ruby, PL/Java, etc., are also supported.8PostgreSQL 9 To start understanding the PostgreSQL basics, first let us install the PostgreSQL. This chapter explains about installing the PostgreSQL on Linux, Windows and Mac OS platforms. Installing PostgreSQL on Linux/UnixFollow the given steps to install PostgreSQL on your Linux machine. Make sure you are logged in as root before you proceed for the installation.∙ Pick the version number of PostgreSQL you want and, as exactly as possible, the platform you want from EnterpriseDB∙I downloaded postgresql-9.2.4-1-linux-x64.run for my 64-bit CentOS-6 machine. Now, let us execute it as follows:∙ Once you launch the installer, it asks you a few basic questions like location of the installation, password of the user who will use database, port number, etc. So keep all of them at their default values except password, which you can provide password as per your choice. It will install PostgreSQL at your Linux machine and will display the following message:∙ Follow the following post-installation steps to create your database:2.10∙You can start/restart postgres server in case it is not running, using thefollowing command:∙If your installation was correct, you will have PotsgreSQL prompt test=# as shown above.Installing PostgreSQL on WindowsFollow the given steps to install PostgreSQL on your Windows machine. Make sure you have turned Third Party Antivirus off while installing.∙Pick the version number of PostgreSQL you want and, as exactly as possible, the platform you want from EnterpriseDB∙I downloaded postgresql-9.2.4-1-windows.exe for my Windows PC running in 32-bit mode, so let us run postgresql-9.2.4-1-windows.exe as administrator to install PostgreSQL. Select the location where you want to install it. By default, it is installed within Program Files folder.11The next step of the installation process would be to select the directory where your data would be stored. By default, it is stored under the "data" directory.12Next, the setup asks for password, so you can use your favorite password.13The next step; keep the port as default.14∙ In the next step, when asked for "Locale", I selected "English, United States".∙It takes a while to install PostgreSQL on your system. On completion of the installation process, you will get the following screen. Uncheck the checkbox and click the Finish button.After the installation process is completed, you can access pgAdmin III, StackBuilder and PostgreSQL shell from your Program Menu under PostgreSQL 9.2.Installing PostgreSQL on MacFollow the given steps to install PostgreSQL on your Mac machine. Make sure you are logged in as administrator before you proceed for the installation.∙∙I downloaded postgresql-9.2.4-1-osx.dmg for my Mac OS running with OS X version 10.8.3. Now, let us open the dmg image in finder and just double click it, which will give you PostgreSQL installer in the following window:15∙Next, click the postgres-9.2.4-1-osx icon, which will give a warning message. Accept the warning and proceed for further installation. It will ask for the administrator password as seen in the following window:∙Enter the password, proceed for the installation, and after this step, restart your Mac machine. If you do not see the following window, start your installation once again.16Once you launch the installer, it asks you a few basic questions like location of the installation, password of the user who will use database, port number etc. Therefore, keep all of them at their default values except the password, which you can provide as per your choice. It will install PostgreSQL in your Mac machine in the Application folder which you can check:17Now, you can launch any of the program to start with. Let us start with SQL Shell.When you launch SQL Shell, just use all the default values it displays except, enter your password, which you had selected at the time of installation. If everything goes fine, then you will be inside postgres database and a postgress#prompt will be displayed as shown below:18Congratulations Now you have your environment ready to start with PostgreSQL database programming.19PostgreSQL20This chapter provides a list of the PostgreSQL SQL commands, followed by the precise syntax rules for each of these commands. This set of commands is taken from the psql command-line tool. Now that you have Postgres installed, open the psql as: Program Files > PostgreSQL 9.2 > SQL Shell(psql).Using psql, you can generate a complete list of commands by using the \help command. For the syntax of a specific command, use the following command: The SQL StatementAn SQL statement is comprised of tokens where each token can represent either a keyword, identifier, quoted identifier, constant, or special character symbol. The table given below uses a simple SELECT statement to illustrate a basic, but complete, SQL statement and its components.PostgreSQL SQL commandsABORTAbort the current transaction. ALTER AGGREGATEChange the definition of an aggregate function. 3.ALTER CONVERSIONChange the definition of a conversion.ALTER DATABASEChange a database specific parameter.ALTER DOMAINChange the definition of a domain specific parameter.ALTER FUNCTIONChange the definition of a function.ALTER GROUPChange a user group.21ALTER INDEXChange the definition of an index.ALTER LANGUAGEChange the definition of a procedural language.ALTER OPERATORChange the definition of an operator.ALTER OPERATOR CLASSChange the definition of an operator class.ALTER SCHEMAChange the definition of a schema.ALTER SEQUENCEChange the definition of a sequence generator.ALTER TABLEChange the definition of a table.Where action is one of the following lines:ALTER TABLESPACE23Change the definition of a tablespace.ALTER TRIGGERChange the definition of a trigger.ALTER TYPEChange the definition of a type.ALTER USERChange a database user account.Where option can be:ANALYZECollect statistics about a database.BEGINStart a transaction block.24Where transaction_mode is one of:CHECKPOINTForce a transaction log checkpoint.CLOSEClose a cursor.CLUSTERCluster a table according to an index.COMMENTDefine or change the comment of an object.25COMMITCommit the current transaction.COPYCopy data between a file and a table.CREATE AGGREGATEDefine a new aggregate function.CREATE CASTDefine a new cast.27CREATE CONSTRAINT TRIGGERDefine a new constraint trigger.CREATE CONVERSIONDefine a new conversion.CREATE DATABASECreate a new database.CREATE DOMAINDefine a new domain.28Where constraint is:CREATE FUNCTIONDefine a new function.CREATE GROUPDefine a new user group.CREATE INDEXDefine a new index.29CREATE LANGUAGEDefine a new procedural language.CREATE OPERATORDefine a new operator.CREATE OPERATOR CLASSDefine a new operator class.30CREATE RULEDefine a new rewrite rule.CREATE SCHEMADefine a new schema.CREATE SEQUENCEDefine a new sequence generator.Define a new table.31Where column_constraint is:And table_constraint is:32End of ebook previewIf you liked what you saw…Buy it from our store @ https://33。
tgreSQL学习手册(五) 函数和操作符阿里云携手开源中国众包平台发布百万悬赏项目»一、逻辑操作符:常用的逻辑操作符有:AND、OR和NOT。
其语义与其它编程语言中的逻辑操作符完全相同。
二、比较操作符:下面是PostgreSQL中提供的比较操作符列表:操作符描述<小于>大于<=小于或等于>=大于或等于=等于!=不等于比较操作符可以用于所有可以比较的数据类型。
所有比较操作符都是双目操作符,且返回boolean类型。
除了比较操作符以外,我们还可以使用BETWEEN语句,如:a BETWEEN x AND y 等效于 a >= x AND a <= ya NOT BETWEEN x AND y 等效于 a < x OR a > y三、数学函数和操作符:下面是PostgreSQL中提供的数学操作符列表:操作符描述例子结果+加 2 + 35-减 2 - 3-1*乘 2 * 36/除 4 / 22%模 5 % 41^幂 2.0 ^ 3.08|/平方根|/ 25.05||/立方根||/ 27.03!阶乘 5 !120!!阶乘!! 5120@绝对值@ -5.05&按位AND91 & 1511|按位OR32 | 335#按位XOR17 # 520~按位NOT~1-2<<按位左移 1 << 416>>按位右移8 >> 22按位操作符只能用于整数类型,而其它的操作符可以用于全部数值数据类型。
按位操作符还可以用于位串类型bit和bit varying,下面是PostgreSQL中提供的数学函数列表,需要说明的是,这些函数中有许多都存在多种形式,区别只是参数类型不同。
除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。
函数返回类型描述例子结果abs(x)绝对值abs(-17.4)17.4 cbrt(double)立方根cbrt(27.0)3ceil(double/numeric)不小于参数的最小的整数ceil(-42.8)-42degrees(double) 把弧度转为角度degrees(0.5)28.6478897565412 exp(double/numeric)自然指数exp(1.0) 2.71828182845905 floor(double/numeric)不大于参数的最大整数floor(-42.8)-43ln(double/numeric)自然对数ln(2.0)0.693147180559945 log(double/numeric)10为底的对数log(100.0)2log(b numeric,x numeric)numeric指定底数的对数log(2.0, 64.0) 6.0000000000mod(y, x)取余数mod(9,4)1pi() double"π"常量pi() 3.14159265358979 power(a double, b double)double求a的b次幂power(9.0, 3.0)729power(a numeric, bnumeric)numeric求a的b次幂power(9.0, 3.0)729radians(double)double把角度转为弧度radians(45.0)0.785398163397448random()double 0.0到1.0之间的随机数值random()round(double/numeric)圆整为最接近的整数round(42.4)42round(v numeric, s int)numeric圆整为s位小数数字round(42.438,2)42.44sign(double/numeric)参数的符号(-1,0,+1) sign(-8.4)-1sqrt(double/numeric)平方根sqrt(2.0) 1.4142135623731 trunc(double/numeric)截断(向零靠近)trunc(42.8)42trunc(v numeric, s int)numeric 截断为s小数位置的数字trunc(42.438,2)42.43三角函数列表:函数描述acos(x)反余弦asin(x)反正弦atan(x)反正切atan2(x, y)正切y/x 的反函数cos(x)余弦cot(x)余切sin(x)正弦tan(x)正切四、字符串函数和操作符:下面是PostgreSQL中提供的字符串操作符列表:函数返回类型描述例子结果string || string text字串连接'Post' || 'greSQL'PostgreSQL bit_length(string)int字串里二进制位的个数bit_length('jose')32char_length(string)int字串中的字符个数char_length('jose')4convert(string using conversion_name)text使用指定的转换名字改变编码。
convert('PostgreSQL' usingiso_8859_1_to_utf8)'PostgreSQL'lower(string)text把字串转化为小写lower('TOM')tom octet_length(string)int字串中的字节数octet_length('jose')4overlay(string placing string from int [for int])text替换子字串overlay('Txxxxas' placing 'hom'from 2 for 4)Thomasposition(substring instring)int指定的子字串的位置position('om' in 'Thomas')3 substring(string [fromint] [for int])text抽取子字串substring('Thomas' from 2 for 3)homsubstring(string from pattern)text抽取匹配POSIX 正则表达式的子字串substring('Thomas' from '...$')massubstring(string from pattern for escape)text抽取匹配SQL正则表达式的子字串substring('Thomas' from'%#"o_a#"_' for '#')omatrim([leading | trailing |both] [characters] from string)text从字串string的开头/结尾/两边/ 删除只包含characters(缺省是一个空白)的最长的字串trim(both 'x' from 'xTomxx')Tomupper(string)text把字串转化为大写。
upper('tom')TOM ascii(text)int参数第一个字符的ASCII码ascii('x')120btrim(string text [, characters text])text从string开头和结尾删除只包含在characters里(缺省是空白)的字符的最长字串btrim('xyxtrimyyx','xy')trimchr(int)text给出ASCII码的字符chr(65)Aconvert(string text, [src_encoding name,] text把字串转换为dest_encodingconvert( 'text_in_utf8', 'UTF8','LATIN1')以ISO 8859-1编码表示的dest_encoding name)text_in_utf8initcap(text)text 把每个单词的第一个子母转为大写,其它的保留小写。
单词是一系列字母数字组成的字符,用非字母数字分隔。
initcap('hi thomas')Hi Thomaslength(string text)int string中字符的数目length('jose')4lpad(string text, length int [, fill text])text通过填充字符fill(缺省时为空白),把string填充为长度length。
如果string已经比length长则将其截断(在右边)。
lpad('hi', 5, 'xy')xyxhiltrim(string text [, characters text])text从字串string的开头删除只包含characters(缺省是一个空白)的最长的字串。
ltrim('zzzytrim','xyz')trimmd5(string text)text 计算给出string的MD5散列,以十六进制返回结果。
md5('abc')repeat(string text,number int)text重复string number次。
repeat('Pg', 4)PgPgPgPgreplace(string text, from text, to text)text把字串string里出现地所有子字串from替换成子字串to。
replace('abcdefabcdef', 'cd', 'XX')abXXefabXXefrpad(string text, length int [, fill text])text通过填充字符fill(缺省时为空白),把string填充为长度length。
如果string已经比length长则将其截断。
rpad('hi', 5, 'xy')hixyxrtrim(string text [, character text])text从字串string的结尾删除只包含character(缺省是个空白)的最长的字rtrim('trimxxxx','x')trimsplit_part(string text, delimiter text, field int)text根据delimiter分隔string返回生成的第field个子字串(1 Base)。