CREATE TABLE new_table as select distinct * from old_table;
これだと毎回面倒なのでシェル化してみました
#/bin/sh DATABASE=$1 TABLE=$2 TMP_TABLE="$2_tmp" BK_TABLE="$2_bk" psql -c "CREATE TABLE $TMP_TABLE as select distinct * from $TABLE;" -U postgres $DATABASE psql -c "CREATE TABLE $BK_TABLE as select * from $TABLE;" -U postgres $DATABASE psql -c "DROP TABLE $TABLE" -U postgres $DATABASE psql -c "ALTER TABLE $TMP_TABLE RENAME TO $TABLE" -U postgres $DATABASE
方法としては、distinctを利用し結果がユニークになることを利用し
テーブルのコピーを行い再度戻す対応となります
念のためバックアップも作成していますが、こちらは不要なら消すべきかと
PKが存在する系では、難しいかも知れませんが中間テーブルなどでは便利な手法です。