我在使用COPY命令用很大的csv文件(〜40gb)填充postgres表时遇到问题。这是我第一次真正使用SQL / postgres,但是我在R / python / linux方面有几年的经验。
CREATE DATABASE exampledb OWNER exampleuser;
#create schema
\c exampledb;
CREATE SCHEMA exampledbSC;
set search_path to exampledbSC;
#this creates the tables
psql 'dbname=exampledb user=exampleuser options=--search_path=exampledbSC' -f postgres_create_tables.sql
#this populates the tables with csv data
psql 'dbname=exampledb user=exampleuser options=--search_path=exampledbSC' -f postgres_load_data.sql -v data_dir='/home/user/datafolder'
最后一个脚本的内部在csvs和表之间有多个\ copy调用,如下所示:
-- Load Data for Table table1
\copy table1 FROM 'table1.csv' DELIMITER ',' CSV HEADER NULL ''
-- Load Data for Table table2
\copy table2 from 'table2.csv' delimiter ',' csv header NULL ''
前3个\ copy执行得很好,但第4个是40gb文件-最终,我在Ubuntu中失去了对键盘和单击功能的控制(但可以移动鼠标)。由于自述文件特别指出这可能是一个数小时的过程,因此我将程序保持这种状态约8个小时,但这似乎是异常的。我所在的本地计算机上有16个内核,在M.2 nvme驱动器上有32gb RAM访问数据。感谢您的帮助!
答案 0 :(得分:0)
这个问题与我运行postgres-10有关,但是表构建脚本适用于以前的版本。我使用的脚本的第二个版本10在一个小时内完成。