質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

233閲覧

dblinkについて postgres12

hahaha_1122

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2024/02/15 07:30

実現したいこと

データベースは違うが、同一テーブル名の値をinsertしたい。(トリガーfunctionで)

発生している問題・分からないこと

Aテーブル → Bと同じ値をBのinsertと同時に追加したい
Bテーブル → insertと同時にAに値を追加するトリガーが発生する
(ABともにカラム名同一)

AテーブルとBテーブルは異なるデータベースにあります(サーバーは同じ)
dblinkを使い、値をとってくるなどはできたのですが

perform dblink_exec('Aデータベースへの接続名' , 'insert into Aテーブル values select * from Bテーブル名')

とした所、AテーブルとBテーブルが同じ名前のため、上記のSQLだとvalueに入れたい値がAテーブルを見てしまうようで重複エラーが発生します。。。(トリガー発動のBテーブルの値をいれたい)
解決方法がわからず困っています、、わかる方お願いします、、

エラーメッセージ

error

1重複エラーが発生しています

該当のソースコード

perform dblink_exec('Aデータベースへの接続名' , 'insert into Aテーブル values select * from Bテーブル名')

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

NEWを使う?(from句の定義が必要と出て断念)

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

dblink_execでは、接続先で、dblink_execを実行する側のテーブルの参照などは出来ません。
Bテーブルのトリガーで、values select ~ではなく、Bテーブルの値を読み取り、values(0, 'a', '{"a0","b0","c0"}')のような値を指定した文字列を組み立てる必要があります。
以下参考
PostgreSQL トリガーで外部プログラムを実行する方法

投稿2024/02/15 13:11

編集2024/02/21 15:26
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hahaha_1122

2024/02/21 11:07

ご回答ありがとうございます。 自分なりに調べましたが、よくわからず追記質問失礼します。 ①dblink_exec 内のinsert文でvaluesに文字列を使うということでしょうか。 ②文字列に入れるBテーブルの値はどのように指定したら良いのでしょうか。 以上二点お答えいただけたら幸いです。
sazi

2024/02/21 15:26 編集

> ①dblink_exec 内のinsert文でvaluesに文字列を使うということでしょうか。 文字列を使うという表現が何を表わしているのか不明ですが、dblink_execが実行可能なSQL文を組み立てるという事です。 > ②文字列に入れるBテーブルの値はどのように指定したら良いのでしょうか。 Bテーブルでのトリガーでしょうから、NEW.カラム名のように参照して、それらで文字列としてのSQL文を組み立てて下さい。 ※回答に参考になりそうなリンクを追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問