次のように、テーブルで削除する必要がある行の行番号を含むテキスト ファイルがあります。
3
32
40
55
[...]
テキスト ファイルを使用してテーブルからこれらの各行を削除する PostgreSQL 互換の SQL ステートメントを取得するにはどうすればよいですか?
次のように、テーブルで削除する必要がある行の行番号を含むテキスト ファイルがあります。
3
32
40
55
[...]
テキスト ファイルを使用してテーブルからこれらの各行を削除する PostgreSQL 互換の SQL ステートメントを取得するにはどうすればよいですか?
一度実行すると、次のようになります。
CREATE TEMP TABLE tmp_x (nr int);
COPY tmp_x FROM '/absolute/path/to/file';
DELETE FROM mytable d
USING tmp_x
WHERE d.mycol = tmp_x.nr;
DROP TABLE tmp_x;
繰り返し使用する場合は、ファイル パス/テーブル名/列名をパラメータとしてplpgsql 関数にラップします。テーブルまたは列の名前が動的である場合は、EXECUTEを使用する必要がありDELETE
ます。
私はアーウィンのものとは少し異なる解決策を持っています。IN
JOIN (USING) を実行すると、クエリが処理する行数が増えるため、使用します。
CREATE TEMP TABLE tmp_x (nr int);
COPY tmp_x FROM '/absolute/path/to/file';
DELETE FROM mytable d
WHERE d.mycol IN (SELECT nr FROM tmp_x);
DROP TABLE tmp_x;