Chapter28大对象

Chapter28.大对象PostgreSQL有一个大对象设施,它为存储在特殊的大对象结构里的用户数据提供流状的访问方式。流访问对那些数据值太大,因而不能一次性操作的数据是很有用的。本章描述PostgreSQL大对象数据的实现以及编程和查询语言接口。我们在本章中使用libpq的C库作为例子,但是大多数PostgreSQL内置的接口都支持等效的功能。其它接口可以在内部使用大对象接口以提供对大对象值的一般性支持。那些内容没有在这里描述。28.1.历史最初,PostgreSQL4.2(PostgreSQL的间接前身)支持三种大对象的标准实现:作为POSTGRES服务器外部的文件扩展,作为由POSTGRES管理的外部文件,以及作为存储在POSTGRES数据库里面的数据.这样做容易导致用户的迷惑.结果是,我们只支持把大对象作为数据存储在PostgreSQL数据库里.即使这样做令数据访问变得有些慢,但却保证了更严格的数据完整性.由于历史原因,这种存储机制被称为转置大对象.(我们将在本章中交互使用转置和大对象来表示同一个意思)。自PostgreSQL7.1开始,所由大对象都保留在一个叫pg_largeobject的系统表里.PostgreSQL7.1引入了一种新的机制(外号叫"TOAST"),允许数据行远远大于单个数据页面。这样就令大对象接口在一定程度上过时了。大对象接口剩余的一个优点是它允许数据最大有2G,而TOAST字段只能处理1G。并且,大对象可以比普通数据值更容易地一片片操作,因此,实际地局限是不一定的。28.2.实现特点转置大对象把大对象分解成"块"("chunks"),然后把块存放在数据库记录里面。在随机读写时使用一个B-tree索引保证对正确的块(chunk)号的检索。28.3.客户端接口本节描述PostgreSQL客户端接口库提供来访问大对象的设施。所有使用这些函数进行的大对象操作都必须在一个SQL事务里实现。(这个要求是自PostgreSQL6.5以来的一个严格的要求,虽然在以前的版本里就隐含这样的要求,如果忽略这一点会导致错误的表现。)PostgreSQL大对象接口是对Unix文件系统的模仿,有仿真的open,read,write,lseek,等.使用libpq里面大对象接口的客户端应用应该包含头文件libpq/libpq-fs.h并且和libpq库链接。28.3.1.创建大对象函数Oidlo_creat(PGconn*conn,intmode);创建一个新的大对象.mode是一个位掩码,描述新对象的不同属性。这里使用的符号常量在libpq/libpq-fs.h列出。访问类型(读,写或者两者)是对位INV_READ和INV_WRITE进行或操作构成的。掩码的低十六位是大对象要存放于内的存储管理器号。对于除Berkeley(伯克利)以外的节点,这些位都应总是零。(访问类型现在实际上也不作任何事情,但是其中一个或者两个位都需要置上,以避免错误。)返回值是赋予新大对象的OID,或者是失败的时候是InvalidOid(零)。例子:inv_oid=lo_creat(conn,INV_READ|INV_WRITE);28.3.2.输入大对象要把一个操作系统文件输入成为大对象,调用Oidlo_import(PGconn*conn,constchar*filename);filename参数指明要被输入成为大对象的操作系统文件路径名。返回值是赋予新大对象的OID。如果失败则返回InvalidOid(零)。请注意这个文件是由客户端接口库读取的,而不是服务器端;因此它必须存在于客户端文件系统上并且可以被客户应用读取。28.3.3.输出大对象要把一个大对象输出为操作系统文件,调用intlo_export(PGconn*conn,Oidlob激d,constchar*filename);lob激d参数指明要输出的大对象OID,filename参数指明操作系统文件的路径名。请注意这个文件是由客户端接口库写入的,而不是服务器端。成功时返回1,失败时返回-1。28.3.4.打开一个现有的大对象要打开一个现存的大对象读写,调用intlo_open(PGconn*conn,Oidlob激d,intmode);参数lob激d指明要打开的大对象的OID(对象标识)。mode位控制该对象是用于读(INV_READ),写(INV_WRITE)还是读写。一个大对象在其创建之前不能被打开。lo_open返回一个(非负的)大对象标识用于以后的lo_read,lo_write,lo_lseek,lo_tell,和lo_close。这个描述符只是在当前事务中有效。失败的时候,返回-1。28.3.5.向大对象中写数据函数intlo_write(PGconn*conn,intfd,constchar*buf,size_tlen);从buf中向大对象描述符fd中写len...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?