Postgres SQL存储函数参数使用说明

2024-05-29 01:08

本文主要是介绍Postgres SQL存储函数参数使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用postgres数据库的过程中,遇到了表分区的问题。为了创建表分区,首先得创建分区表。首先想到的是写个存储函数,然后定时的创建分区表,然后再创建触发器去操作分区表。但是在创建存储函数时,怎么把分区表的表名当作参数传进存储函数,然后在函数内部动态创建表。可是直接使用字符串的表名不起作用。经研究,需要使用EXECUTE去执行,具体做法为:拼接一个创建表的sql语句,然后用EXECUTE 执行sql语句,这样创建表就完成了。详细代码如下:

CREATE OR REPLACE FUNCTION "public"."pro_partition_play_recond"(tablename varchar)RETURNS "pg_catalog"."void" AS $BODY$Declare  sqlstring varchar(1024); start_date varchar DEFAULT '2017-08-01';end_date varchar DEFAULT '2017-09-01';index_str varchar ;
BEGINsqlstring:= 'create table '|| tablename ||'(check(create_date >= ''' || start_date || '''  AND create_date < ''' || end_date || ''')) INHERITS (md_play_recode);';EXECUTE sqlstring;index_str=tablename || '_create_date';raise notice 'Parameter  is: %', index_str ;	sqlstring:='create index '||index_str||' on '|| tablename ||' (create_date);';EXECUTE sqlstring;END
$BODY$LANGUAGE 'plpgsql' VOLATILE COST 100
;ALTER FUNCTION "public"."pro_partition_play_recond"(tablename varchar) OWNER TO "postgres";

说明:表名参数tablename 在拼接sql语句时,应用用:'|| tablename ||',需要加引号时用这个''' || start_date || '''。这是3个单引号。
调用如下:

select pro_partition_play_recond('md_play_recode_201708');

效果如下:




代码如下:

CREATE OR REPLACE FUNCTION "public"."pro_partition_play_recond"(tablename varchar)
RETURNS "pg_catalog"."void" AS $BODY$Declare  
sqlstring varchar(1024); 
start_date varchar DEFAULT '2017-08-01';
end_date varchar DEFAULT '2017-09-01';
index_str varchar ;
BEGIN
sqlstring:= 'create table '|| tablename ||'(check(create_date >= ''' || start_date || '''   AND create_date < ''' || end_date || ''')) INHERITS (md_play_recode);';
EXECUTE sqlstring;
index_str=tablename || '_create_date';
raise notice 'Parameter  is: %', index_str ;	
sqlstring:='create index '||index_str||' on '|| tablename ||' (create_date);';
EXECUTE sqlstring;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100
;


这篇关于Postgres SQL存储函数参数使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012209

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误