Postgresql删除匹配主键的记录

时间:2016-03-05 19:59:25

标签: sql database postgresql etl

我们通过批处理从第三方数据提供商处获取数据。对于它们提供的模式,它们会发出分隔文本文件,指示要删除的记录,然后是要添加的记录的不同文本文件。

我删除记录的计划是将记录加载到临时表中,然后通过内部联接删除记录。例如:

-- main table
CREATE TABLE main_table (
  city VARCHAR(40) NOT NULL,
  state CHAR(2) NOT NULL,
  PRIMARY KEY (city, state));

-- removing records
CREATE TEMPORARY TABLE delete_table (
  city VARCHAR(40) NOT NULL,
  state CHAR(2) NOT NULL,
  PRIMARY KEY (city, state));

INSERT INTO main_table (city, state) VALUES
  ('Chicago', 'IL'),
  ('Seattle', 'WA'),
  ('New York', 'NY'),
  ('Springfield', 'IL'),
  ('Springfield', 'MA');

INSERT INTO delete_table (city, state) VALUES
  ('Chicago', 'IL'),
  ('New York', 'NY'),
  ('Springfield', 'MA');

-- Delete statement
DELETE FROM main_table t
  USING delete_table d
  WHERE t.city=d.city AND t.state=d.state;

这是在这种情况下通常删除记录的最佳方法吗?记录删除的范围可以从几行到一百万,具体取决于表和日以及一百个表。此外,任何具有复合主键的表都需要自定义的where子句。有没有办法使用自然连接或USING(列列表)谓词?

0 个答案:

没有答案