我已经创建了一个数据库和一个表。
表名(A、B、C)
我还有一个文本文件,格式如下:
numA1:numB1
numA2:numB2
numAn:numBn
如何将此文本文件插入表中,并将C列的所有行设置为值?整个表中C列的值应该相同。
检查COPY
:
copy your_table(c) FROM 'yourPathOnClient/yourFile.txt';
步骤1:创建一个与要导入的文件匹配的表:
CREATE TABLE csv_data (
colA FLOAT,
colB FLOAT
);
步骤2:从shell中,使用STDIN将数据复制到表中。(如果你想知道为什么STDIN是一条路,请看另一个问题。)
cat YourFile.csv | psql -c "COPY csv_data FROM STDIN (FORMAT CSV, DELIMITER ':', HEADER FALSE);"
步骤3:添加不在数据文件中的列,并为其指定默认值。
ALTER TABLE csv_data ADD COLUMN colC FLOAT DEFAULT 1234.56;
编辑:
如果要导入多个文件:
步骤1:创建两个表:
CREATE TABLE csv_data_staging (
colA FLOAT,
colB FLOAT
);
CREATE TABLE csv_data (
colA FLOAT,
colB FLOAT,
colC FLOAT
);
步骤2:
cat YourFile.csv | psql -c "COPY csv_data_staging FROM STDIN (FORMAT CSV, DELIMITER ':', HEADER FALSE);"
步骤3:
INSERT INTO csv_data SELECT *, 1234.45 /* The C Value */ FROM csv_data_staging;
TRUNCATE csv_data_staging;
重复步骤2&3。