68user's page 掲示板

Prev< No. 4207〜4212> Next  [最新発言に戻る] [過去ログ一覧]
No. 4207 # 中川 2005/07/27 (水) 21:54:05
何度もありがとうございました。大変助かりました。
SQL初心者なのでこれを機にテクニカルを身に付けようと思います。

度々すみませんが、また質問です
昨日の質問なのですが、データベースの異なるテーブル
にトリガーを使って外部キーをつけるという処理を
今日一日悩んだのですが、トリガーを使ったことがなく、
少しも理解できていません。
トリガーを使って異なるデータベースのテーブルに外部キ
ー制約を行う方法を教えていただけないでしょうか。

No. 4208 # 68user 2005/07/27 (水) 23:36:50
>>4207 中川
またそこから始めるんですか? 全然 4202 から状況が変わってないように見えますが、
4203-4206 のやりとりは何だったんでしょうか。

まぁ、それはそれとして、トリガを使う案は

    - DB1 にテーブル T1、DB2 にテーブル T2 がある
    - DB1 の T1 のカラム A には、DB2 の T2 のカラム A に存在する値しか入れたくない
    - しかし PostgreSQL の外部キーでは、dblink を使えないようだ
    - ならば DB2 の T2 と同じ内容のテーブル T2 を DB1 にも作って、そこに外部キーを設定しては
    - となると DB2 の T2 と、DB1 の T2 の間でテーブル内容の同期をとる必要がある
    - では DB2 の T2 にトリガをセットして、T2 に対する INSERT・UPDATE・DELETE が
        発生したら、自動的に DB1 の T2 に同じデータを反映するようにするのがいいのでは

というものです。DB2 の T2 がごくまれにしか更新されないテーブルであれば、
トリガを使う必要はないかもしれません (30分に一回 INSERT INTO SELECT
で DB2 の T2 の内容を DB1 の T2 にコピーするとか)。

別の案としては、DB1 の T1 に INSERT・UPDATE がかかったときに、トリガで
DB2 の T2 のカラム A を見にいって、データが存在しなかったら RAISE して
エラーにする、というのもあります。
    http://www.postgresql.jp/document/pg803doc/html/plpgsql-errors-and-messages.html

いずれも何も試さずに言ってます。念のため。

No. 4209 # まつ 2005/07/29 (金) 18:18:09
皆様こんにちは。
ここはcshの質問をしても宜しいのでしょうか?
sedを使ってCSVファイルをTSVファイルに変換しようとしているのですが
変換元と変換先のファイル名にシェルの引数を認識してくれません。


if ($4 == CSV) then
        #TSVに変換
        sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw $LOG_DIR/$1.bad'
endif

アクセス権がありませんとか、オープンできませんというエラーになります。
下記のようにフルパスにすると正常に処理してくれます。
sed -e 's/","/ /g' /disk1/FNC021.bad | sed -n -e 's/"//gw /disk1/FNC021.bad'

ファイル名を「`」でくくったり\でエスケープ?してみましたがダメでした。
sedを知らないので頓珍漢なことをしているのかもしれません。
有識者の皆様、助けて下さい。m(_ _)m

No. 4210 # まつ 2005/07/29 (金) 18:46:39
すみません!!!
過去ログを眺めていて、適当に
sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw '$LOG_DIR/$1.bad''
と’’をつけたら動いてしまいました。。

どうもお騒がせしました。m(_ _)m m(_ _)m

No. 4211 # 68user 2005/07/29 (金) 23:03:10
>>4210 まつ
今後は
    #!/bin/csh -fx
などと -x オプションを付けてデバッグすることをお勧めします。

No. 4212 # まつ 2005/07/30 (土) 12:51:12
こんにちわ。

スクリプト内1行目に-fxオプションをつければよいのでしょうか?
知りませんでした。。御恥ずかしい。
どのような結果になるのか月曜にでも確認してみます。

どうもありがとうございました! m(__)m

Prev< No. 4207〜4212> Next  [最新発言に戻る] [過去ログ一覧]