[英]Conditional insert into postgres DB from CSV
我想將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有可能嗎?
我將使用PL / pgSQL函數和一個臨時表在兩個階段中實現它。 基本上:
COPY FROM
CSV文件COPY FROM
到該臨時表中 LEFT JOIN
到最終表中現有行的SELECT
插入到最終表中,因此可以確定primary
行是否已存在 (順便說一句,這意味着您可以使用SECURITY DEFINER
函數,該函數以root
身份創建,但由特權較低的用戶以CSV文件名硬編碼運行,而不是以root
身份運行整個導入。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.