PostgreSQL大对象

文章目录

  • 插入数据
  • 查看元数据
  • 导出文件到本地
  • 查看导出数据
  • 删除对象

PostgreSQL有一个大对象工具,它提供了对存储在特殊大对象结构中的用户数据的流方式访问。当处理数据值太大而无法方便地作为一个整体操作时,流访问非常有用。

所有大对象都存储在一个名为pg_largeobject的系统表中。每个大对象在系统表pg_largeobject_metadata中也有一个条目。可以使用类似于对文件的标准操作的读/写API来创建、修改和删除大型对象。

大对象实现将大对象分解成“块”,并将块存储在数据库的行中。b树索引保证在进行随机访问读写时快速搜索正确的块号。

为大对象存储的块不必是连续的。例如,如果应用程序打开一个新的大对象,寻求偏移1000000,并在那里写入几个字节,这不会导致分配
100万字节的存储空间;只包含实际写入的数据字节范围的块。但是,读取操作将为最后一个现有块之前的任何未分配位置读出零。
这对应于Unix文件系统中“稀疏分配”文件的常见行为。

zhangliang[postgres@localhost ~]$ psql
psql (14.7)
Type "help" for help.
postgres=# CREATE TABLE image (name text,raster oid);
CREATE TABLE

插入数据

postgres=# insert into image(name, raster) values( 'test', lo_import('/home/postgres/.bash_profile'));
INSERT 0 1

查看元数据

postgres=# select * from pg_largeobject_metadata;
  oid  | lomowner | lomacl 
-------+----------+--------
 16399 |       10 | 
(1 row)

导出文件到本地

postgres=# select lo_export(raster, '/home/postgres/profile') from image where name = 'test';
 lo_export 
-----------
         1
(1 row)

查看导出数据

zhangliang[postgres@localhost ~]$ ls *profile*
profile
zhangliang[postgres@localhost ~]$ cat profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH=/usr/local/pgsql/bin:$PATH
export PGDATA=/usr/local/pgsql/data
export PGPORT=15432

删除对象

postgres=# select lo_unlink(raster) from image where name = 'test';
 lo_unlink 
-----------
         1
(1 row)

你可能感兴趣的:(postgresql,postgresql,数据库)