鍍金池/ 問答/數(shù)據(jù)庫/ postgresql 批量插入

postgresql 批量插入

有兩個小問題:
1、postgresql 在執(zhí)行批量時插入時間是一致的,有沒有辦法讓他們不一致?
2、當庫中已經(jīng)存在重復數(shù)據(jù)時,整個執(zhí)行操作就失敗了。比如一次插入10條,其中有一條是庫中重復了,整個10條都沒辦法入庫。有沒有辦法插入其它9條?當然在插入之間做查詢?nèi)ブ卦俨迦胧寝k法,但有沒有辦法讓PG自己完成?

回答
編輯回答
避風港
  1. 使用存儲過程生成不一樣的時間。比如
CREATE OR REPLACE FUNCTION get_random_date(start_date date, end_date date) RETURNS integer AS  
$BODY$  
DECLARE  
    interval_days integer;  
    random_days integer;  
    random_date date;  
BEGIN  
    interval_days := end_date - start_date;  
    random_days := get_random_number(0, interval_days);  
    random_date := start_date + random_days;  
    RETURN date_part('year', random_date) * 10000 + date_part('month', random_date) * 100 + date_part('day', random_date);  
END;
  1. 把不希望重復的字段設成唯一索引。然后使用insert into ... on duplicate key update ...
INSERT INTO table(column1, column2) VALUES(value1,value2) ON DUPLICATE KEY UPDATE column2 = VALUES(column2);
2017年9月21日 03:48
編輯回答
尐飯團

1)關于時間

PostgreSQL 提供一系列的函數(shù)獲取“當前”時間。
a) 當前事務啟動的時間:transaction_timestamp()
b)當前語句啟動的時間:statement_timestamp()
c) 當前函數(shù)被調(diào)用的時間:clock_timestamp()

使用 clock_timestamp() 即可。

https://www.postgresql.org/do...

2)關于插入時沖突

Insert 語句可以指定ON CONFLICT子句,用于定義插入數(shù)據(jù)沖突時的解決方式:

a) DO NOTHING: 不插入沖突數(shù)據(jù)
b) DO UPDATE: 沖突時修改原有記錄為給定值

https://www.postgresql.org/do...

2017年2月8日 01:54