PostgGresql如何简单实现sqlserver中的分页存储

系统 1807 0

 

 

 

相信一直在搞sqlserver的人突然要将数据库从sqlserver迁移到postgresql来,一定会很关注诸如sqlserver和postgresql数据类型的差异、存储过程、作业、视图、触发器如何转换的问题,很幸运的最近遇到了一个做完的项目要从sqlserver2008转换到postgresql, 由于项目的规模不大,因此数据库中只涉及到几十张基本表,加上一个分页的存储过程和一个作业,但是数据量确实异常的大,考虑到以后的分布式存储也是要换数 据库的一个原因(当然作为一个刚入行一年的小菜我来说,不会说出这样的话,嘿嘿是一个预言组的同事的构想,可惜苦逼的做事的是我呵呵);今天经过对postgresql文档的简短的查看,大概了解一二,我就看是动手做了,建表的过程不用说了,就是注意下类型,控制好别弄错了为以后带来麻烦。

废话不多说,直接说PostgGresql如何实现分页

下面的是sqlserver中的分页存储过程:

CREATE PROCEDURE [dbo].[PAGESELECT]

@SQLPARAMS nvarchar(2000)='', --查询条件

@PAGESIZE int=20,--每页的记录数

@PAGEINDEX int=0, --第几页,默认第一页

@SQLTABLE varchar(5000),--要查询的表或视图,也可以一句sql语句

@SQLCOLUMNS varchar(4000),--查询的字段

@SQLPK varchar(50),--主键 

@SQLORDER varchar(200),--排序

@Count int=-1 output

AS

BEGIN

SET NOCOUNT ON;

DECLARE @PAGELOWERBOUND INT 

DECLARE @PAGEUPPERBOUND INT

DECLARE @SQLSTR nvarchar(4000)

--获取记录数

IF @PAGEINDEX=0  --可根据实际要求修改条件,如果是总是获取记录数

BEGIN

set @SQLSTR=N'select @sCount=count(1) FROM '+@SQLTABLE+' WHERE 1=1'+@SQLPARAMS

Exec sp_executesql @sqlstr,N'@sCount int outPut',@Count output

END

ELSE

BEGIN

SET @COUNT =-1 

END

 

SET @PAGELOWERBOUND= @PAGEINDEX *@PAGESIZE+1

SET @PAGEUPPERBOUND = @PAGELOWERBOUND +@PAGESIZE-1

IF @SQLORDER=''

BEGIN

SET @SQLORDER='ORDER BY '+@SQLPK

END

 

 

SET @SQLSTR=N'SELECT * FROM (select '+@SQLCOLUMNS+',ROW_NUMBER() Over('+@SQLORDER+') as PAGESELECT_rowNum FROM '+@SQLTABLE+' WHERE 1=1'+@SQLPARAMS+ ') as PAGESELECT_TABLE

where PAGESELECT_rowNum between '+STR(@PAGELOWERBOUND)+' and '+STR(@PAGEUPPERBOUND)+' '

print @SQLSTR

Exec sp_executesql @SQLSTR

 

SELECT @COUNT

 

END

 

 

  咋一想,sqlServer上的思路照着弄到postgresql中就ok了(存储过程在postgresql中叫函数),后来也确实根据sql改了一个存储过程,写了一大串,其实在postgresql中远远不用这么麻烦的,postgresql根据情况写一个sql就可以了,其实存储过程中也是这么实现的

 

Select  @columns from  @table where 1=1 and  @params  order by  @order   limit @pagesize offset @pagelowbound

然后在项目中动态的写入参数就ok了,都说分页支持多少万多少万的数据,但是我有点迷糊如何才是负载呢

 

项目现在还差作业没弄到postgresql,下一步就要弄这个....希望明天能搞定。

我是一只小菜,那里写错了或是言语上说错了请不吝指教,我需要大家的帮助,好多不懂好多劈头盖面的迷茫!!!!

 

PostgGresql如何简单实现sqlserver中的分页存储过程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论