如何访问外表上的大型对象存储



我已经设置了postgres_fdw来访问"远程"数据库(实际上它在同一台服务器上(。工作正常。除了其中一列是大型对象的 oid,我如何读取该数据?

我弄清楚了如何做到这一点。大型对象存储也可以通过pg_largeobject表进行访问。所以我做到了

create foreign table if not exists global_lo (
loid oid not null,
pageno integer not null,
data bytea 
)
server glob_serv options(table_name 'pg_largeobject', schema_name 'pg_catalog');

现在我可以读取一个大对象(所有对象,我无法流式传输等(

select data from global_lo where loid = 1234

如果您有权访问外部数据库,则可以在其上创建一个视图,以将lob转换为byteatext,以便本地数据库可以使用它们。

在外部数据库上,您将创建视图:

drop view if exists tmp_view_produto_descricao;
create view tmp_view_produto_descricao as
select * from (
select dado.*, lo_get(dado.descricaoExtendida_oid) as descricaoEstendida
from (
select 
itm.id as item_id, 
case when itm.descricaoExtendida is Null then null else Cast(itm.descricaoExtendida as oid) end descricaoExtendida_oid
from Item itm
where itm.descricaoExtendida is Not Null
and   Cast(itm.descricaoExtendida as Text) != ''
) dado
) dado
where Cast(descricaoEstendida as Text) != '';

在本地数据库上,您将声明外部视图,以便可以使用它:

create foreign table tmp_origem.tmp_view_produto_descricao (
item_id bigint,
descricaoExtendida_oid oid,
descricaoEstendida bytea
) server tmp_origem options (schema_name 'public');

这稍微混乱和冗长,但会给你带来比直接pg_largeobject更好的性能。

相关内容

  • 没有找到相关文章

最新更新