MW211 EXIT

devlog
PostgreSQL/更新順は指定できませんよ
2013年04月24日
挿入時には挿入順(並び順)を指定できる。
┌──────────────────────────────────────┐
│INSERT INTO 出力表 (列) SELECT 列 FROM 入力表 ORDER BY 列 ASC;              │
└──────────────────────────────────────┘

更新時には更新順(並び順)を指定できない。以下は(「ORDER BY」以降)無理。
┌──────────────────────────────────────┐
│UPDATE 出力表 SET 列 = 入力表.列 FROM 入力表 ORDER BY 入力表.列 ASC;        │
└──────────────────────────────────────┘

解決策としてはSQL関数を使うってのがある。
┌──────────────────────────────────────┐
│仮入力表 RECORD;                                       DECLARE領域で変数定義│
├──────────────────────────────────────┤
│FOR 仮入力表 IN SELECT 列 FROM 入力表 ORDER BY 列 ASC LOOP                  │
│    UPDATE 出力表                                                           │
│        SET 列 = 仮入力表.列                                                │
│        WHERE 列 = 仮入力表.列;                                             │
│END LOOP;                                                                   │
└──────────────────────────────────────┘

ま、たいていは影響のない話だろう。タイムスタンプをつけても同一になるだけだし。
これが問題となったのは、「UPDATE」にトリガを仕込んで
変更履歴を「INSERT」させた時。
変更履歴が意図した順で追加されなかったのだ。
分類:PostgreSQL