1

id_user共通の名前の列を持つ2つのテーブルがあります。これらの2つのテーブルは、ある時点でDrupal Webページに作成されます(Netbeansプロジェクトを作成しなかったため、わかりません)。

インターネットで調べたところ、おそらく2番目のテーブルに追加することで、 (新しいユーザーが到着したときに常に作成される)の値を(どの時点でかわからない)REFERENCES 1sttable (id_user)の値にコピーする必要があることがわかりました。作成した)。それが正しいか?1sttableid_user2ndtable

正しくない場合は、pgAdminでこれらのテーブルを同期させる方法、または少なくとも両方を同時に作成する方法を知りたいと思います。

私が抱えている問題は、新しいユーザーが1sttable登録するとすぐに新しい行が自動的にオンになることですが、新しい行を取得するに2ndtableは、すべてのデータを挿入するなどの何らかの「アクティブ化」が必要です。私が探しているのは、に新しい行があるとすぐ1sttableに、他のテーブルにも新しい行を自動的に作成する方法です。それをもっと明確にする方法がわかりません(英語は私の母国語ではありません)。

あなたが私に与えた解決策は質問に対して明確に見えますが、問題は少し大きいです:2つのテーブルは異なる種類の変数を提示し、それらはmySQLではユーザーデータ(ユーザーのdrupalデフォルト)を持っているはずです、それから私はpostgresqlに2つあり、両方とも同じ主キー(id_user)を持っています:

  • 最初の列は118列で、そのほとんどは実数の整数です。
  • 2番目の列は50列で、タイプが混在しています。

私が使用しているWebアプリケーションでは、すべての値が空ではない(そうでない場合はNullPointerExceptionが発生します)この列の両方が機能する必要があるため、検索しているのは(私が思うに)次のとおりです。

ユーザーがdrupalに登録(メールを挿入)すると、2つのフルフィルメント列が自動的に作成され、メールがmysqlに保存されるとすぐにWebが自動的に機能するようになります。出来ますか?それはよく説明されていますか?

私の環境は次のとおりです。

  • Windows Server 2008 Enterprise Edition
  • Glassfish 2.1
  • netbeans 6.7.1
  • drupal 6.17
  • postgresql 8.4
  • mysql 5.1.48
4

2 に答える 2

1

pgAdminは単なる GUI です。RDBMSであるPostgreSQLのことです。

あなたのような外部キー制約は、参照された列に存在しない値を使用できないことを強制するだけです。ON UPDATE CASCADEまたはを使用して、参照された列から変更を伝達できますが、説明したように新しい行ON DELETE CASCADEを作成することはできません。間違ったツールを手に入れました。

あなたが説明することは、トリガーで達成できます。別のより複雑な方法は、RULE. ここでトリガーを使用します。

PostgreSQLでは、主にplpgsqlを使用するトリガー関数と、それを使用するテーブルのトリガーが必要です。

何かのようなもの:

CREATE OR REPLACE FUNCTION trg_insert_row_in_tbl2()
  RETURNS trigger AS
$func$
BEGIN
   INSERT INTO tbl2 (my_id, col1)
   VALUES (NEW.my_id, NEW.col1)     -- more columns?

   RETURN NEW;  -- doesn't matter much for AFTER trigger
END
$func$  LANGUAGE plpgsql;

AFTER INSERTそしてトリガーtbl1

CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();
于 2012-05-01T18:21:36.590 に答える
0

Drupal フックを使用して、ユーザーの登録時に実行されるコードを追加する方法についてお読みになることをお勧めします。フックの使用方法を理解したら、2 番目のテーブルに対応するレコードを挿入するコードを (モジュールで) 記述できます。ここで使用する適切なフック候補は、Drupal 6 のhook_userまたはDrupal 7 の hook_user_insert です

あなたが読んだREFERENCESは、2番目のテーブルから最初のテーブルへの外部キー制約を定義するSQLコマンドの一部です。これは、問題を解決するために厳密に必要というわけではありませんが、データベースの一貫性を保つのに役立ちます。このトピックについて詳しく知りたい場合は、データベースの構造と制約について読むことをお勧めします。

于 2012-04-12T14:51:47.187 に答える