制約条件の追加
外部キー制約を変更する。
Djangoでmanage.py syncdbを行った時点では、SQL自体にON DELETE CASCADEは付加されない。
なぜかというと、DjangoはDjangoフレーム内で擬似的にON DELETE CASCADEをエミュレートしているからだ。
(ドキュメント参照)
しかし、SQL文で直接DELETEしたいときは困る。
そこで制約を付け加えてみた。
手順は
(1).一度制約条件を削除する。
(2).ON DELETE CASCADEを付け加える。
まず、
postgres=# \d tablename
で外部キー制約を見てみる。
テーブル "public.message_uki2content"
カラム | 型 | 修飾語
---------------+--------------------------+----------
ref1_id | integer | not null
ref2_id | character varying(48) | not null
ref3_id | integer | not null
外部キー制約:
"hoge_ref1_id_fkey" FOREIGN KEY (ref1_id) REFERENCES ref1_model(id) DEFERRABLE INITIALLY DEFERRED
"hoge_ref2_id_fkey" FOREIGN KEY (ref2_id) REFERENCES ref2_model(id) DEFERRABLE INITIALLY DEFERRED
"hoge_ref3_id_fkey" FOREIGN KEY (ref3_id) REFERENCES ref3_model(id) DEFERRABLE INITIALLY DEFERRED
上記外部キー制約を削除する。
$ vim file.sql
ALTER TABLE tablename DROP CONSTRAINT hoge_ref1_id_fkey;
ALTER TABLE tablename ADD CONSTRAINT hoge_ref1_id_fkey FOREIGN KEY (ref1_id) REFERENCES ref1_model(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
読み込ませる。
postgres=# \d file.sql
参考サイト
日付データを扱う方法
CASTとDATEを使う
select * from account_accountmodel where regtime > CAST('2010-7-30 0:0:0' AS DATE);