位置: 编程技术 - 正文

PostgreSQL教程(七):函数和操作符详解(3)

编辑:rootadmin

推荐整理分享PostgreSQL教程(七):函数和操作符详解(3),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

九、序列操作函数:

序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表。一个序列对象通常用于为行或者表生成唯一的标识符。下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安全的方法。

函数 返回类型 描述 nextval(regclass) bigint 递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。 currval(regclass) bigint 在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过 nextval,那么会报告一个错误。)请注意因为此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。 lastval() bigint 返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 setval(regclass, bigint) bigint 重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。 setval(regclass, bigint, boolean) bigint 重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。

对于regclass参数,仅需用单引号括住序列名即可,因此它看上去就像文本常量。为了达到和处理普通SQL对象一样的兼容性,这个字串将被转换成小写,除非该序列名是用双引号括起,如: 十、条件表达式:

1. CASE: SQL CASE表达式是一种通用的条件表达式,类似于其它语言中的if/else语句。 condition是一个返回boolean的表达式。如果为真,那么CASE表达式的结果就是符合条件的result。如果结果为假,那么以相同方式搜寻随后的WHEN子句。如果没有WHEN condition为真,那么case表达式的结果就是在ELSE子句里的值。如果省略了ELSE子句而且没有匹配的条件,结果为NULL,如: 注:CASE表达式并不计算任何对于判断结果并不需要的子表达式。 2. COALESCE:

COALESCE返回它的第一个非NULL的参数的值。它常用于在为显示目的检索数据时用缺省值替换NULL值。 和CASE表达式一样,COALESCE将不会计算不需要用来判断结果的参数。也就是说,在第一个非空参数右边的参数不会被计算。 3. NULLIF: 当且仅当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。 4. GREATEST和LEAST: GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。列表中的NULL数值将被忽略。只有所有表达式的结果都是NULL的时候,结果才会是NULL。

十一、数组函数和操作符:

1. PostgreSQL中提供的用于数组的操作符列表: 操作符 描述 例子 结果 = 等于 ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] t <> 不等于 ARRAY[1,2,3] <> ARRAY[1,2,4] t < 小于 ARRAY[1,2,3] < ARRAY[1,2,4] t > 大于 ARRAY[1,4,3] > ARRAY[1,2,4] t <= 小于或等于 ARRAY[1,2,3] <= ARRAY[1,2,3] t >= 大于或等于 ARRAY[1,4,3] >= ARRAY[1,4,3] t || 数组与数组连接 ARRAY[1,2,3] || ARRAY[4,5,6] {1,2,3,4,5,6} || 数组与数组连接 ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] {{1,2,3},{4,5,6},{7,8,9}} || 元素与数组连接 3 || ARRAY[4,5,6] {3,4,5,6} || 元素与数组连接 ARRAY[4,5,6] || 7 {4,5,6,7}

2. PostgreSQL中提供的用于数组的函数列表:

函数 返回类型 描述 例子 结果 array_cat(anyarray, anyarray) anyarray 连接两个数组 array_cat(ARRAY[1,2,3], ARRAY[4,5]) {1,2,3,4,5} array_append(anyarray, anyelement) anyarray 向一个数组末尾附加一个元素 array_append(ARRAY[1,2], 3) {1,2,3} array_prepend(anyelement, anyarray) anyarray 向一个数组开头附加一个元素 array_prepend(1, ARRAY[2,3]) {1,2,3} array_dims(anyarray) text 返回一个数组维数的文本表示 array_dims(ARRAY[[1,2,3], [4,5,6]]) [1:2][1:3] array_lower(anyarray, int) int 返回指定的数组维数的下界 array_lower(array_prepend(0, ARRAY[1,2,3]), 1) 0 array_upper(anyarray, int) int 返回指定数组维数的上界 array_upper(ARRAY[1,2,3,4], 1) 4 array_to_string(anyarray, text) text 使用提供的分隔符连接数组元素 array_to_string(ARRAY[1, 2, 3], '~^~') 1~^~2~^~3 string_to_array(text, text) text[] 使用指定的分隔符把字串拆分成数组元素 string_to_array('xx~^~yy~^~zz', '~^~') {xx,yy,zz}

十二、系统信息函数:

1. PostgreSQL中提供的和数据库相关的函数列表:

PostgreSQL教程(七):函数和操作符详解(3)

名字 返回类型 描述 current_database() name 当前数据库的名字 current_schema() name 当前模式的名字 current_schemas(boolean) name[] 在搜索路径中的模式名字 current_user name 目前执行环境下的用户名 inet_client_addr() inet 连接的远端地址 inet_client_port() int 连接的远端端口 inet_server_addr() inet 连接的本地地址 inet_server_port() int 连接的本地端口 session_user name 会话用户名 pg_postmaster_start_time() timestamp postmaster启动的时间 user name current_user version() text PostgreSQL版本信息 2. 允许用户在程序里查询对象访问权限的函数:

名字 描述 可用权限 has_table_privilege(user,table,privilege) 用户是否有访问表的权限 SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER has_table_privilege(table,privilege) 当前用户是否有访问表的权限 SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER has_database_privilege(user,database,privilege) 用户是否有访问数据库的权限 CREATE/TEMPORARY has_database_privilege(database,privilege) 当前用户是否有访问数据库的权限 CREATE/TEMPORARY has_function_privilege(user,function,privilege) 用户是否有访问函数的权限 EXECUTE has_function_privilege(function,privilege) 当前用户是否有访问函数的权限 EXECUTE has_language_privilege(user,language,privilege) 用户是否有访问语言的权限 USAGE has_language_privilege(language,privilege) 当前用户是否有访问语言的权限 USAGE has_schema_privilege(user,schema,privilege) 用户是否有访问模式的权限 CREAT/USAGE has_schema_privilege(schema,privilege) 当前用户是否有访问模式的权限 CREAT/USAGE has_tablespace_privilege(user,tablespace,privilege) 用户是否有访问表空间的权限 CREATE has_tablespace_privilege(tablespace,privilege) 当前用户是否有访问表空间的权限 CREATE

注:以上函数均返回boolean类型。要评估一个用户是否在权限上持有赋权选项,给权限键字附加 WITH GRANT OPTION;比如 'UPDATE WITH GRANT OPTION'。 3. 模式可视性查询函数: 那些判断一个对象是否在当前模式搜索路径中可见的函数。 如果一个表所在的模式在搜索路径中,并且没有同名的表出现在搜索路径的更早的地方,那么就说这个表视可见的。 它等效于表可以不带明确模式修饰进行引用。

名字 描述 应用类型 pg_table_is_visible(table_oid) 该表/视图是否在搜索路径中可见 regclass pg_type_is_visible(type_oid) 该类/视图型是否在搜索路径中可见 regtype pg_function_is_visible(function_oid) 该函数是否在搜索路径中可见 regprocedure pg_operator_is_visible(operator_oid) 该操作符是否在搜索路径中可见 regoperator pg_opclass_is_visible(opclass_oid) 该操作符表是否在搜索路径中可见 regclass pg_conversion_is_visible(conversion_oid) 转换是否在搜索路径中可见 regoperator

注:以上函数均返回boolean类型,所有这些函数都需要对象 OID 标识作为检查的对象。 4. 系统表信息函数:

名字 返回类型 描述 format_type(type_oid,typemod) text 获取一个数据类型的SQL名称 pg_get_viewdef(view_oid) text 为视图获取CREATE VIEW命令 pg_get_viewdef(view_oid,pretty_bool) text 为视图获取CREATE VIEW命令 pg_get_ruledef(rule_oid) text 为规则获取CREATE RULE命令 pg_get_ruledef(rule_oid,pretty_bool) text 为规则获取CREATE RULE命令 pg_get_indexdef(index_oid) text 为索引获取CREATE INDEX命令 pg_get_indexdef(index_oid,column_no,pretty_bool) text 为索引获取CREATE INDEX命令, 如果column_no不为零,则是只获取一个索引字段的定义 pg_get_triggerdef(trigger_oid) text 为触发器获取CREATE [CONSTRAINT] TRIGGER pg_get_constraintdef(constraint_oid) text 获取一个约束的定义 pg_get_constraintdef(constraint_oid,pretty_bool) text 获取一个约束的定义 pg_get_expr(expr_text,relation_oid) text 反编译一个表达式的内部形式,假设其中的任何Vars都引用第二个参数指出的关系 pg_get_expr(expr_text,relation_oid, pretty_bool) text 反编译一个表达式的内部形式,假设其中的任何Vars都引用第二个参数指出的关系 pg_get_userbyid(roleid) name 获取给出的ID的角色名 pg_get_serial_sequence(table_name,column_name) text 获取一个serial或者bigserial字段使用的序列名字 pg_tablespace_databases(tablespace_oid) setof oid 获取在指定表空间(OID表示)中拥有对象的一套数据库的OID的集合

这些函数大多数都有两个变种,其中一个可以选择对结果的"漂亮的打印"。 漂亮打印的格式更容易读,但是缺省的格式更有可能被将来的PostgreSQL版本用同样的方法解释;如果是用于转储,那么尽可能避免使用漂亮打印。 给漂亮打印参数传递false生成的结果和那个没有这个参数的变种生成的结果完全一样。

十三、系统管理函数:

1. 查询以及修改运行时配置参数的函数:

名字 返回类型 描述 current_setting(setting_name) text 当前设置的值 set_config(setting_name,new_value,is_local) text 设置参数并返回新值

current_setting用于以查询形式获取setting_name设置的当前数值。它和SQL命令SHOW是等效的。 比如: set_config将参数setting_name设置为new_value。如果is_local设置为true,那么新数值将只应用于当前事务。如果你希望新的数值应用于当前会话,那么应该使用false。它等效于SQL命令SET。比如: 2. 数据库对象尺寸函数:

名字 返回类型 描述 pg_tablespace_size(oid) bigint 指定OID代表的表空间使用的磁盘空间 pg_tablespace_size(name) bigint 指定名字的表空间使用的磁盘空间 pg_database_size(oid) bigint 指定OID代表的数据库使用的磁盘空间 pg_database_size(name) bigint 指定名称的数据库使用的磁盘空间 pg_relation_size(oid) bigint 指定OID代表的表或者索引所使用的磁盘空间 pg_relation_size(text) bigint 指定名称的表或者索引使用的磁盘空间。这个名字可以用模式名修饰 pg_total_relation_size(oid) bigint 指定OID代表的表使用的磁盘空间,包括索引和压缩数据 pg_total_relation_size(text) bigint 指定名字的表所使用的全部磁盘空间,包括索引和压缩数据。表名字可以用模式名修饰。 pg_size_pretty(bigint) text 把字节计算的尺寸转换成一个人类易读的尺寸单位

3. 数据库对象位置函数:

名字 返回类型 描述 pg_relation_filenode(relationregclass) oid 获取指定对象的文件节点编号(通常为对象的oid值)。 pg_relation_filepath(relationregclass) text 获取指定对象的完整路径名。 该博客中提供的所有信息均源自PostgreSQL官方文档,编写该篇博客的主要目的是便于今后的查阅,特此声明。

PostgreSQL教程(八):索引详解 一、索引的类型:PostgreSQL提供了多种索引类型:B-Tree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时

PostgreSQL教程(十一):服务器配置 一、服务器进程的启动和关闭:下面是pg_ctl命令的使用方法和常用选项,需要指出的是,该命令是postgres命令的封装体,因此在使用上比直接使用postgres

PostgreSQL教程(十):性能提升技巧 一、使用EXPLAIN:PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为关键的。PostgreSQL本身已经包含了一个规划器用

标签: PostgreSQL教程(七):函数和操作符详解(3)

本文链接地址:https://www.jiuchutong.com/biancheng/319455.html 转载请保留说明!

上一篇:PostgreSQL教程(六):函数和操作符详解(2)

下一篇:PostgreSQL教程(八):索引详解

  • 离职员工奖金发放规定
  • 小规模纳税人能开专票吗2023
  • 进口增值税的计税价格为
  • 增值税专用发票抵扣期限
  • 存货报废进项是否要转出
  • 支付办公楼维修费
  • 从价定率的计算公式
  • 国内增值税专用发票造假第一大案
  • 资产减值准备对股票的影响
  • 发票弄丢下一步怎么办
  • 不动产折旧年限的规定
  • 发票管理中的四流一致是指什么一致
  • 核定征收企业如何纳税
  • 主营业务成本明细账图
  • 可以用来办理贴现的票据
  • 物流运输途中损坏怎么办
  • 补开发票怎么做分录?
  • 报废资产处置收入怎么计税
  • 医院计提坏账准备分录
  • 发票逾期未认证个人要承担责任吗
  • 酒店客房主营业务支出明细表怎么写
  • 代缴个税税务局奖励款怎么做账?
  • 公司购买自用房产税如何征收
  • 华为鸿蒙怎么搞
  • iphone怎么格式化掉所有内容和设置
  • 一家公司各项费用支出
  • php 反射
  • qclean.exe - qclean是什么进程 有什么用
  • 销货方发票红冲操作流程
  • wordpress测试
  • 固定资产抵债交不交增值税
  • 被公司辞退有钱吗
  • 贷款减值损失准备怎么算
  • 外贸企业出口退税流程(详细步骤)
  • 商品入库进项税额怎么算
  • 购进运输服务取得的增值税专用发票准予抵扣进项税额吗
  • 桌山 开普敦
  • php批量更新数据库
  • 事业单位小规模纳税人缴纳附加税有什么,税率是多少
  • 外经证核销期限是多久
  • 蓝桥杯咋样
  • python中函数的用法
  • 企业注销时实收资本清算时要作资产处置收益交所得税吗
  • 存货非正常损失可以所得税前扣除吗
  • 个人退税证明怎么开具
  • mysql密码忘记了咋办
  • mongodb怎么用
  • 抵扣进项税是怎么算的
  • 生产成品出库的会计分录
  • 支付给职工以及为职工支付的现金增加说明什么
  • 权益性投资收益确认收入时间
  • 预付款什么时候开发票
  • 公司一年发两次奖金
  • 开办职工食堂
  • 公司安装监控属于什么费用
  • 劳务费打到私人账户
  • 测绘费如何入账
  • 记账凭证可以先做贷方吗
  • 一般纳税人抵扣进项税流程
  • 维修基金只有收据没有发票吗
  • 定期存款到期转存利息也转存吗
  • 算账的意思是什么?
  • sql server2019数据库
  • mysql5.7版本的服务的名字是
  • XP系统怎么调节屏幕亮度
  • ubuntu16.04命令行配置静态ip
  • 映泰重装系统按什么
  • 预装win10
  • win8系统一直重启
  • 千元以内电脑
  • win10通过任务管理器打开设置
  • linux chakan
  • Unity3D游戏开发培训课程大纲
  • js查看浏览器信息
  • 网络自定义怎么打开
  • 变量赋值的含义
  • Linux 中的各项 CPU 利用率是这样算出来的
  • js拖拽效果
  • 用js改变css样式
  • jquery中if语句
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设