external_file

通过 PostgreSQL 函数访问服务器端外部文件

概览

扩展包名版本分类许可证语言
external_file1.2UTILPostgreSQLSQL
ID扩展名BinLibLoadCreateTrustReloc模式
4285external_fileexternal_file

Fixed schema external_file; superuser required.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.21817161514external_file-
RPMPIGSTY1.21817161514external_file_$v-
DEBPIGSTY1.21817161514postgresql-$v-external-file-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
el9.x86_64
el9.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
el10.x86_64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
el10.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
d12.x86_64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
d12.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
d13.x86_64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
d13.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
u22.x86_64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
u22.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
u24.x86_64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
u24.aarch64
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2
PIGSTY 1.2

构建

您可以使用 pig build 命令构建 external_file 扩展的 RPM / DEB 包:

pig build pkg external_file         # 构建 RPM / DEB 包

安装

您可以直接安装 external_file 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install external_file;          # 当前活跃 PG 版本安装
pig ext install -y external_file -v 18  # PG 18
pig ext install -y external_file -v 17  # PG 17
pig ext install -y external_file -v 16  # PG 16
pig ext install -y external_file -v 15  # PG 15
pig ext install -y external_file -v 14  # PG 14
dnf install -y external_file_18       # PG 18
dnf install -y external_file_17       # PG 17
dnf install -y external_file_16       # PG 16
dnf install -y external_file_15       # PG 15
dnf install -y external_file_14       # PG 14
apt install -y postgresql-18-external-file   # PG 18
apt install -y postgresql-17-external-file   # PG 17
apt install -y postgresql-16-external-file   # PG 16
apt install -y postgresql-15-external-file   # PG 15
apt install -y postgresql-14-external-file   # PG 14

创建扩展

CREATE EXTENSION external_file;

用法

  • 来源: GitHub 仓库, README
  • external_file 提供通过 PostgreSQL 扩展访问外部文件的能力,类似 Oracle BFILE 风格的定位器。
CREATE EXTENSION external_file;

README 说明对象默认创建在 external_file 模式中,且创建扩展需要 PostgreSQL 超级用户权限。

核心流程

该扩展使用“目录别名 + 文件名”来标识外部文件。上游 README 展示的流程如下:

INSERT INTO directories(directory_name, directory_path)
VALUES ('temporary', '/tmp/');

INSERT INTO directory_roles(directory_name, directory_role, directory_read, directory_write)
VALUES ('temporary', 'a_role', true, false);

SELECT writeEfile('\x48656c6c6f2c0a0a596f75206172652072656164696e67206120746578742066696c652e0a0a526567617264732c0a',
                  ('temporary', 'blahblah.txt'));
SELECT readefile(the_file) FROM efile_test;
SELECT copyefile(('temporary', 'blahblah.txt'), ('temporary', 'copy_blahblah.txt'));

主要导出辅助函数包括 efilenamereadEfilewriteEfilecopyEfilegetEfilePath

备注

该扩展不会直接读取服务器文件系统上的文件。它通过服务器端 lo_* 系列函数访问文件,并通过目录表和角色表控制访问权限。


最后修改 2026-04-14: update extension catalog (fa7cf58)