INSERT INTO laputa VALUES (5, 'バルス')
バルス!!!
なんか社内のYammerで
新規登録をミスって全削除しちゃうってどんなUIになってるんだ
みたいな話題がちょっと流れていたので、なんとなくこんな下らないことをイメージしてしまった。
[nuko] psql laputa psql (9.3.2) Type "help" for help. laputa=# SELECT * FROM laputa ; id | data ----+-------- 1 | パズー 2 | シータ 3 | ドーラ (3 rows) laputa=# INSERT INTO laputa VALUES (4, 'ムスカ'); INSERT 0 1 laputa=# SELECT * FROM laputa ; id | data ----+-------- 1 | パズー 2 | シータ 3 | ドーラ 4 | ムスカ (4 rows) laputa=# INSERT INTO laputa VALUES (5, 'バルス'); INSERT 0 1 laputa=# SELECT * FROM laputa ; id | data ----+------ (0 rows) laputa=#
dataカラムに'バルス'をINSERTしようとすると、テーブル内容が全滅するlaputaテーブル・・・
バルスの仕組み
こんなトリガ定義をするとバルスで全滅するテーブルが設定できるw
CREATE TABLE laputa(id int, data text); CREATE OR REPLACE FUNCTION insert_after_row_col_trig_func() RETURNS trigger AS $$ BEGIN IF (NEW.data = 'バルス') THEN DELETE FROM laputa; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER insert_after_row_col_trig AFTER insert ON laputa FOR EACH ROW EXECUTE PROCEDURE insert_after_row_col_trig_func();
補足
DELETEのところをTRUNCATEしようとしても、これはうまく行かない。
ERROR: cannot TRUNCATE "laputa" because it is being used by active queries in this session
DELETEと違ってTRUNCATEではテーブルファイルそのものを削除→0バイトで再生成するからなんだろうな・・・
いいわけ
うん、そうなんだ。気分が乗らないから本来やるべき執筆をサボってるんだw