我有一个主Postgres表:
visitIp userId idSite
10.12.0.1 a 35
10.12.0.1 a 35
10.12.0.1 b 35
24.222.206.154 b 35
我有一个新的csv文件,每天生成但有不同的列。只有列'visitIp'和idSite'相同。有时他们会有一个额外的列,比如'action'。有没有办法将它们合并到表中并自动化该过程。一个示例csv文件是:
visitIp action idSite
10.12.0.1 1 35
10.12.0.1 2 35
24.222.206.154 1 35
所以在合并后它应该是:
visitIp userId idSite action
10.12.0.1 a 35
10.12.0.1 a 35
10.12.0.1 b 35
24.222.206.154 b 35
10.12.0.1 35 1
10.12.0.1 35 2
24.222.206.154 35 1
我尝试了COPY命令并使用PGadmin导入。不工作。还有一种方法可以使过程自动化。任何想法都会非常有用。 Postgres新手
答案 0 :(得分:0)
Linux - 命令行:
打开一个新文本文件并将其命名为test.sql
vi test.sql
复制以下内容并粘贴到test.sql
DROP TABLE csvfile1; DROP TABLE csvfile2; DROP TABLE master; CREATE TABLE master(visitip inet, userID varchar, action integer, idsite integer); INSERT INTO master(visitip , action, idsite) VALUES('10.12.0.1', 1, 35); INSERT INTO master(visitip , action, idsite) VALUES('10.12.0.1', 2, 35); INSERT INTO master(visitip , action, idsite) VALUES('24.222.206.154', 1, 35); CREATE TABLE csvfile1(visitip inet, userID varchar, action integer, idsite integer) INHERITS (master); COPY csvfile1(visitip,userid,idsite) FROM '/tmp/csvfile.csv' DELIMITER ',' CSV; CREATE TABLE csvfile2(visitip inet, userID varchar, action integer, idsite integer) INHERITS (master); COPY csvfile2(visitip,userid,idsite) FROM '/tmp/csvfile.csv' DELIMITER ',' CSV; SELECT * FROM master; SELECT * FROM csvfile1; SELECT * FROM csvfile2;
保存并退出文件
:WQ
打开终端并以postgres用户(或数据库群集的所有者)身份登录
执行sql脚本
psql -f test.sql
<强> 2。 pgAdmin的:强>
您的csvfile.csv包含
“10.12.0.1”,A,35
“10.12.0.1”,a,35
“10.12.0.1”,B,35
“24.222.206.154”,B,35
<强>输出:强>
postgres=# select * from master;
visitip | userid | action | idsite
----------------+--------+--------+--------
10.12.0.1 | | 1 | 35
10.12.0.1 | | 2 | 35
24.222.206.154 | | 1 | 35
10.12.0.1 | a | | 35
10.12.0.1 | a | | 35
10.12.0.1 | b | | 35
24.222.206.154 | b | | 35
10.12.0.1 | a | | 35
10.12.0.1 | a | | 35
10.12.0.1 | b | | 35
24.222.206.154 | b | | 35
(11 rows)
postgres=# select * from csvfile1;
visitip | userid | action | idsite
----------------+--------+--------+--------
10.12.0.1 | a | | 35
10.12.0.1 | a | | 35
10.12.0.1 | b | | 35
24.222.206.154 | b | | 35
(4 rows)
postgres=# select * from csvfile2;
visitip | userid | action | idsite
----------------+--------+--------+--------
10.12.0.1 | a | | 35
10.12.0.1 | a | | 35
10.12.0.1 | b | | 35
24.222.206.154 | b | | 35
(4 rows)