codecamp

PostgreSQL 实现特性

大对象的实现将大对象分解成很多数据块并且将这些数据块存储在数据库的行中。一个B-tree索引用来保证在进行随机访问读写时能够根据数据块号快速地搜索到正确的数据块。

为一个大对象存储的数据块并不需要是连续的。例如,如果一个应用打开了一个新的大对象,移动到偏移量1000000并写了一些字节,这并不会导致分配1000000字节的存储,只有覆盖写入字节范围的数据块需要被分配。而一个读操作将会把现有最后的数据块之前还未分配的位置读出为0。这和Unix文件系统中稀疏文件的一般行为相对应。

PostgreSQL 9.0起,大对象可以有一个拥有者和一组访问权限,它们可以用GRANTREVOKE管理。读一个大对象需要 SELECT权限,而写或者截断一个大对象则需要UPDATE权限。只有大对象的拥有者(或者一个数据库超级用户)可以创建大对象、注释大对象或修改大对象的拥有者。要调整这些行为以兼容以前的发行,请见lo_compat_privileges的运行时参数。


PostgreSQL 简介
PostgreSQL 客户端接口
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

PostgreSQL SQL语言

PostgreSQL 服务器管理

PostgreSQL 客户端接口

PostgreSQL 服务器编程

PostgreSQL 参考

PostgreSQL 内部

PostgreSQL 附录

PostgreSQL 参考书目

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }