質問: 現在、Oracle11からPostgreSQL9.5.1のリプレースを行っています。 Oracleで使用できていた、TABLE SELECTした結果を使って、 DBLINKを使用してCREATE TABLEするという以下のコードがあります。 CREATE TABLE TABLE_A AS (SELECT * FROM TABLE_A@DBLINK) PostgreSQL9.5.1では、以下のように、フィールド項目・属性を指定 しないといけません。 CREATE TABLE TABLE_A AS (SELECT * FROM TABLE_A@DBLINK) AS T1(ID1 integer, ID2 character varying(6) ) これをDB情報から取得して行う方法はないでしょうか?
回答: oracleのdblinnkに該当する機能は、postgres9.3からはdblinnkからfdw(Foreign Data Wrapper)として機能アップしています。 fdw自体がリンクするテーブルの属性を定義する必要があるので、create table as select ~ では、属性を指定しない記述が可能です。 > > これをDB情報から取得して行う方法はないでしょうか? > > > 外部の情報とは種類の違うDBMSも当然あり得るわけで、接続するDBMSごとにそのカタログ情報を理解して組み込み判別するようなことは、普通行いません。ODBC接続なら提供されるドライバー次第なので可能な気もしますが、そこまでは行っていないようです。 ですので、dblinkでもfdwでもアクセスする情報の定義が必要になります。