|
>>4199 中川 PostgreSQL の dblink がいつのまに DB2 に対応したのかと 1時間 悩んでしまいました。 dblink は result set を返すものですが、foreign key は テーブル名・項目名を記述するものなので、無理じゃないですかね。 # Oracle なら foreign key(C) references DB_T2@dblinkname (c) # でいけそうですが。 やるなら DB1_T1 にトリガを設定して、UPDATE・INSERT・DELETE された ときに DB_T2 を見にいくとか。 |
|
大変早いお返事本当にありがとうございます。 とても悩んでいたので助かりました。 一番上にPostgreSQL と書くべきでした。 PostgresでdblinkとForeign keyを使うのは無理でしたか。 dblink以外を使って他のデータベースのテーブルをForeign key制約 に指定する方法はないのでしょうか? 上司に無理です。と言い切るしかないかもしれません。 |
|
>>4201 中川 外部キーにこだわるなら、 - 定期的に他データベースからデータを取得してローカルのテーブルに入れる - 他データベースからトリガでローカルのテーブルに反映する くらいしかないのでは、とわたしは思います。 |
|
大変早いお返事本当にありがとうございます。 とても悩んでいたので助かりました。 一番上にPostgreSQL と書くべきでした。 PostgresでdblinkとForeign keyを使うのは無理でしたか。 dblink以外を使って他のデータベースのテーブルをForeign key制約 に指定する方法はないのでしょうか? 上司にForeign keyにdblinkは無理です。と言ったところ、 データベースA データベースB テーブルT_A テーブルT_B A B C A B C 1 0 0 2 0 0 3 0 0 データベースAのテーブルT_Aの列E_1の選択した値だけ(1だけ や 2だけ)を データベースBのテーブルT_Bの列 Aに、INSERTする。 そのときテーブルT_Bの列BにはデータベースBのテーブルT_Cの列BをINSERT し、Cにはすきな値を入れる。 という処理をする事になりました。 dblinkとビューを使ってデータベースBのテーブルT_Bに変わるものを作れば いいと思ったのですが、selectした値をそれぞれの列に入れ込む処理が見当 たらず停滞しています。 いい案がありましたらよろしくお願いします |
|
>>4203 中川 - 最終的に何をしたいのか - 現状のどこが問題なのか を読み取ることができません。 |
|
わかりづらくて申し訳ありませんでした。 やりたい処理は テーブル1の列Aには、テーブル2の列A テーブル1の列Bには、テーブル3の列B テーブル1の列Cには、その場で作った 値をINSERTさせる という処理がした いのですが、解決策が見つかりません。 副問いで、SELECTした値をINSERTさせ ようとしたのですが、SELECTは一つし か使えないようなので複数SELECTして それぞれの列にINSERTさせるというの は無理なのでしょうか。 |
|
>>4205 中川 INSERT INTO T1 (A, B, C) SELECT T2.A, T3.B, 'HOGE' FROM T2, T3 WHERE (T2 と T3 に関する条件) ということですか? 手元に PostgreSQL はないので確認できませんが、Oracle では一応動きました。 |
|
何度もありがとうございました。大変助かりました。 SQL初心者なのでこれを機にテクニカルを身に付けようと思います。 度々すみませんが、また質問です 昨日の質問なのですが、データベースの異なるテーブル にトリガーを使って外部キーをつけるという処理を 今日一日悩んだのですが、トリガーを使ったことがなく、 少しも理解できていません。 トリガーを使って異なるデータベースのテーブルに外部キ ー制約を行う方法を教えていただけないでしょうか。 |
|
>>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 いずれも何も試さずに言ってます。念のため。 |
|
皆様こんにちは。 ここは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 |
|
すみません!!! 過去ログを眺めていて、適当に sed -e 's/","/ /g' $LOG_DIR/$1.bad | sed -n -e 's/"//gw '$LOG_DIR/$1.bad'' と’’をつけたら動いてしまいました。。 どうもお騒がせしました。m(_ _)m m(_ _)m |
|
>>4210 まつ 今後は #!/bin/csh -fx などと -x オプションを付けてデバッグすることをお勧めします。 |
|
こんにちわ。 スクリプト内1行目に-fxオプションをつければよいのでしょうか? 知りませんでした。。御恥ずかしい。 どのような結果になるのか月曜にでも確認してみます。 どうもありがとうございました! m(__)m |
|
UNIX の部屋を更新しました。 http://X68000.q-e-d.net/~68user/unix/ 未稿の部分が多くて恐縮ですが、書けども書けども終わりが見えないので、 いったん公開することにします。 |
|
はじめまして、sekiと申します。 ftpに関しまして、分からない事があり質問させて頂きます。 どなたかご存知の方おられましたら、ご教示をお願い致します。 【環境】 ・Solaris8 ・in.ftpdを使用 【問題】 ・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された ファイルを取得する。 ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、 ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。 【知りたい事】 ・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で 短く出来るのであれば短くしたい。 【検証】 (1) OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、 ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。 変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で ftp_connect:接続の時間切れとなる。 (2) /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて タイムアウトを設定し、inetdデーモンを、kill -HUPした。 こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、 以前4分でftp_connect:接続の時間切れとなった。 ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d ※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は どこの設定でクライアントはtimeoutを判断するのでしょうか? 私の推測のようにTCPに依存するものなのでしょうか? http://x68000.q-e-d.net/~68user/net/ftp-1.html |
|
はじめまして、sekiと申します。 ftpに関しまして、分からない事があり質問させて頂きます。 どなたかご存知の方おられましたら、ご教示をお願い致します。 【環境】 ・Solaris8 ・in.ftpdを使用 【問題】 ・バッチ処理にて、バーチャルIPでftpを行い、他ホストに作成された ファイルを取得する。 ネットワーク障害時や他ホストdown時、バーチャルIPが見えなくなる場合、 ftpのconnect:接続の時間切れとなるが、その場合約4分も待たされる。 【知りたい事】 ・上記のような障害時、1ノードで約4分も待たされるのは長いので、設定で 短く出来るのであれば短くしたい。 【検証】 1 OSパラメータのtcp_time_wait_interval=240000(4分)になっていたので、 ftpがconnect_timeoutになるのは、上位のTCPのタイマーに引っかかるのでは と思い、nddコマンドにて60000(1分)にしてinetdデーモンを、kill -HUPした。 変更後、バーチャルIPが見えないHostに対しftpを行なったが、以前4分で ftp_connect:接続の時間切れとなる。 2 /etc/inet/inetd.confの、ftp記述部分を下記のように-tオプションにて タイムアウトを設定し、inetdデーモンを、kill -HUPした。 こちらも変更後、バーチャルIPが見えないHostに対しftpを行なったが、 以前4分でftp_connect:接続の時間切れとなった。 ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d ※ 下記のURLを参考にさせて頂きましたが、FTPクライアントがFTP サーバに PORTコマンドを投げて応答なしで、データ用コネクションも張れない場合は どこの設定でクライアントはtimeoutを判断するのでしょうか? 私の推測のようにTCPに依存するものなのでしょうか? http://x68000.q-e-d.net/~68user/net/ftp-1.html |
|
>>4215 seki > tcp_time_wait_interval=240000(4分)になっていたので、 tcp_time_wait_intrval は TIME_WAIT な時間を設定するものなので、 関係ありません。 http://docs.sun.com/app/docs/doc/816-0607/6m735r5ga?a=view > ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -t20 -l -d タイムアウト設定をしたいのは ftp であり、ftpd ではないので 関係ありません。そもそもネットワーク障害や他ホストが down して いるのであれば、ftpd まで行き着いていません。 今回設定したいのは、 http://X68000.q-e-d.net/~68user/net/tcp-connect-1.html における connect のタイムアウト時間と思われますが、OS の設定で 変更できるかどうかは知りません。ただし、普通は OS の設定は変更 しません。たとえば今後、 - FTP 接続だけは 10秒でタイムアウトさせたい - それ以外のプログラムでは 4分待たせたい というときにどうしようもなくなるからです。 対策としては、 - ftp に -T [タイムアウト秒数] オプションを付ける (試していませんが) - ftp の前に ping してみる (タイムアウト秒数を指定) - 監視用プロセスをたて、一定時間反応がなければ ftp を kill する てな感じでしょうか。 |
|
>>4216 68user > たとえば今後、 > - FTP 接続だけは 10秒でタイムアウトさせたい > - それ以外のプログラムでは 4分待たせたい > というときにどうしようもなくなるからです。 → 誠に早急なご返答、及びご教示の程、ありがとうございます。 上記の返答、ごもっともです。 - ftp に -Tをつけるのは、一つの手だと思いますが、APLに手を 入れる事なく設定変更で済ませれるのであれば済ませたいです。 申し訳ございませんが、ftpのソースコードなどは開示されていないので しょうか?? (4分でタイムアウトするという事は必ずどこかを見て判断しているはずですので ソースにじか書きしている可能性もある?かと思われるため確認したいです。) |