You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL v16是否有SQL Server OPENROWSET的JSON读取等效功能?

PostgreSQL 16读取JSON文件的两种实现方式

PostgreSQL 16不需要必须先通过COPY加载到临时表,它支持直接读取服务器上的JSON文件并解析,同时也保留了COPY到临时表的方案,两种场景各有用处:

一、直接读取并解析JSON文件

利用pg_read_file()读取服务器上的文件内容,再结合JSON处理函数直接解析,等效于SQL Server的OPENROWSET+OPENJSON组合。

注意事项

  • 文件必须在PostgreSQL服务器可访问的路径下,默认仅允许读取数据目录(data_directory)内的文件;
  • 需要拥有pg_read_server_files权限(超级用户默认具备,也可通过GRANT pg_read_server_files TO your_user;给普通用户授权)。

示例代码

假设temprj.json存放在PostgreSQL数据目录中,内容格式如下:

[{"id":1,"project_name":"Alpha"},{"id":2,"project_name":"Beta"}]

直接解析的SQL语句:

SELECT *
FROM jsonb_to_recordset(
  pg_read_file('temprj.json')::jsonb
) AS projects(id int, project_name text);

二、通过COPY加载到临时表再解析

如果JSON文件在客户端机器上,或者不想处理服务器文件权限,可以用COPY先导入临时表,再解析数据,这种方式更灵活,对权限要求更低。

示例代码

-- 创建临时表存储原始JSON内容
CREATE TEMP TABLE temp_projects (raw_data jsonb);

-- 从本地文件导入(若文件在服务器,路径改为服务器绝对路径,如 '/var/lib/postgresql/16/main/temprj.json')
COPY temp_projects FROM '/本地路径/temprj.json';

-- 解析并提取数据
SELECT *
FROM temp_projects, jsonb_to_recordset(raw_data) AS t(id int, project_name text);

总结

  • 若文件在PostgreSQL服务器上且有权限,直接读取的方式更高效;
  • 若文件在客户端或权限受限,COPY到临时表的方案更实用。

内容的提问来源于stack exchange,提问作者ChrisAsi71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:42:40