((回答后编辑:这是一个典型的 XY 问题/问题,在 PostgreSQL 的 FileSystem 函数上使用绝对路径没有限制。正如@LaurenzAlbe 评论,“试一试”。))
我需要导出/导入 JSON 文件、CSV 文件、XML、GeoJSON 等。示例:
CREATE EXTENSION adminpack;
SELECT pg_catalog.pg_file_write(
'base/pgsql_tmp/test1_hello.txt',
E'Hello\n\n\tWorld!',
false
);
所有都是临时的(存在于 BEGIN/COMMIT 中),但没问题?
没有文件名冲突的风险?(例如我的文件名和 pgsql 的托管临时表文件名)
没有目录 (
base
) 卷溢出的风险?(例如,当我在那里保存一个大文件时)相同文件名上的读写序列没有风险吗?它们将在 BEGIN/COMMIT 部分同步?
注释和上下文
有时我们可以说“数据库服务器不是为一般文件 I/O 设计的”(ref),但有时我们需要它(!),以简化和自动化ETL或接口过程。
关于第 1 项和实际用途,为了简化导出/导入过程(并且不需要记住在哪里是data_directory
),最好创建一个${data_directory}/base/pgsql_tmp/MyArea
到其他区域的符号链接(例如/tmp/MyRealArea
)。