textsearch_jaを使ったSELECT文をpsqlコマンドで実行してみる
一度ワード検索をかけたてout1.txtにファイルとして保存し
whileでout1.txtを読み出して対象レコードを削除するスクリプトだ。
bashシェルを使って作成した。
psql -qAt -U user hogedb > out1.txt << _EOF
SELECT oid FROM tablename WHERE to_tsvector('japanese', title) @@ to_tsquery('japanese', 'おなかすいた');
_EOF
while read LINE; do
echo $LINE
echo "DELETE FROM tablename WHERE id = '$LINE'" | psql -q -U username hogedb
done < 'out1.txt'
これを入れ子にするとファイル出力の必要もなく一行で済むのではないかと
"DELETE FROM tablename WHERE id IN (SELECT id FROM tablename WHERE to_tsvector('japanese', title) @@ to_tsquery('japanese', 'おなかすいた')) " | psql -qAt -U username hogedb
うまくいきそう。
しかし、削除対象レコードがリレーションあってエラー
ERROR: update or delete on table "tablename" violates foreign key constraint "child_parentref_id_fkey" on table "child"
DETAIL: Key (oid)=(3d01b9716b19b1960f33cd5e03fc8397) is still referenced from table "child".
これはあらかじめテーブル構築時に制約条件である「ON DELETE CASCADE」を追加しなければならない。
参考リンク: