我想将CSV导入到Postgres表中,但我希望能够根据表中现有的行来决定列是否应为0或1。
例如,我正在向表中添加联系人,并希望在没有主要联系人的情况下将其标记为主要联系人,否则将其添加为辅助联系人:
现有行:
contact_id | branch_id | primary
-------------+-----------+--------
1 | 100 | 1
2 | 101 | 1
3 | 101 | 0
CSV数据,
contact_id | branch_id
-----------+-----------
4 | 100
5 | 101
6 | 102
7 | 103
期望的结果,
contact_id | branch_id | primary
-----------+-----------+--------
1 | 100 | 1
2 | 101 | 1
3 | 101 | 0
4 | 100 | 0
5 | 101 | 0
6 | 102 | 1
7 | 103 | 1
注意联系人4和5被添加为辅助,因为这些分支已经存在主要联系人,而6和7被添加为主要联系人,因为这些分支不存在主要联系人。
这可以用postgres 9.2吗?
答案 0 :(得分:2)
我将使用PL / pgSQL函数和临时表分两个阶段实现。基本上是:
COPY FROM
您的CSV文件进入该临时表SELECT
中的LEFT JOIN
插入到最终表中,以便确定primary
行是否已存在(顺便说一句,这意味着您可以使用SECURITY DEFINER
函数创建为root
,但由权限较低的用户运行,CSV文件名为硬编码,而不是将整个导入作为root
。)