我正在从一个巨大的csv文件中进行批量插入,该文件需要同时转换为关系对象和JSONB对象,并转换为表。问题:插入需要执行插入或更新。如果是最新消息的话。列需要将JSON对象追加到行。我目前的设置有单独的INSERT/UPDATE调用,当然,它非常慢。
我正在运行的导入命令示例:
INSERT INTO "trade" ("id_asset", "trade_data", "year", "month") VALUES ('1925ad09-51e9-4de4-a506-9bccb7361297', '{"28":{"open":2.89,"high":2.89,"low":2.89,"close":2.89}}', 2017, 3) ON CONFLICT ("year", "month", "id_asset") DO
UPDATE SET "trade_data" = "trade"."trade_data" || '{"28":{"open":2.89,"high":2.89,"low":2.89,"close":2.89}}' WHERE "trade"."id_asset" = '1925ad09-51e9-4de4-a506-9bccb7361297' AND "trade"."year" = 2017 AND "trade"."month" = 3;
我试过将我的脚本 Package 在BEGIN
和COMMIT
中,但它根本没有提高性能,我尝试了一些配置,但似乎没有帮助。
\set autocommit off;
set schema 'market';
\set fsync off;
\set full_page_writes off;
SET synchronous_commit TO off;
\i prices.sql
这整个事情是非常缓慢的,我不知道如何重写查询,而不加载大量的数据到RAM使用我的程序只是吐出一个大的INSERT/UPDATE命令有效地为Postgres读取。因为相关数据可能是一百万行或另一个文件,所有这些都可以正确地生成JSON,而不会丢失数据库中已经存在的当前JSON数据。
1条答案
按热度按时间2ledvvac1#
简单地
scp
将我的大型SQL文件移动到Postgres服务器中,并重新运行psql中的命令,现在迁移速度非常快。