postgresql 批量插入

有两个小问题:
1、postgresql 在执行批量时插入时间是一致的,有没有办法让他们不一致?
2、当库中已经存在重复数据时,整个执行操作就失败了。比如一次插入10条,其中有一条是库中重复了,整个10条都没办法入库。有没有办法插入其它9条?当然在插入之间做查询去重再插入是办法,但有没有办法让PG自己完成?

阅读 8.3k
2 个回答
  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);

1)关于时间

PostgreSQL 提供一系列的函数获取“当前”时间。
a) 当前事务启动的时间:transaction_timestamp()
b)当前语句启动的时间:statement_timestamp()
c) 当前函数被调用的时间:clock_timestamp()

使用 clock_timestamp() 即可。

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

2)关于插入时冲突

Insert 语句可以指定ON CONFLICT子句,用于定义插入数据冲突时的解决方式:

a) DO NOTHING: 不插入冲突数据
b) DO UPDATE: 冲突时修改原有记录为给定值

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进