PostgreSQL odbc_fdwデータ異常
odbc_fdw経由でoracleとdb2へ接続し、データを取得したところ、
テーブルのレコード件数は正しく表示されますが、
各レコードの項目のデータが正しく表示されません。
※常に1項目目の値は'#'、2項目目以降はnull
何が問題なのでしょうか?
具体的な対処法はありますでしょうか?
よろしくお願いいたします。
[参考情報]
・サーバ側のバージョンは以下の通り
OS: Windows Server 2019 Standard
PostgreSQL: postgresql-x64-16
・postgreSQLサーバ側のデータベースの文字コードはUTF8
※特に文字化けの問題ではなさそうな気はします。
・OS側のODBCの定義は問題ありません。
別のツール(A5:SQL Mk-2)で正しく参照できています。
・odbc_fdwのモジュールは以下の2つで試しましたが、結果は同じです
1. 以下のサイトのWindows用のバイナリバージョンで、CREATE EXTENSION odbc_fdw
https://www.postgresonline.com/journal/index.php?/categories/85-odbc_fdw
POSTGRESQL 16 64-BIT FOR WINDOWS FDWS
2. 下記サイトのソースコードをビルドした結果を、ALTER EXTENSION odbc_fdw UPDATE
https://github.com/CartoDB/odbc_fdw
■参照結果: odbc_fdw(oracle)
postgres=# select count(*) from odbc_zzzz_test_tbl4;
count
-------
2
(1 row)
postgres=# select * from odbc_zzzz_test_tbl4;
data_id | name1 | name2 | update_d
---------+-------+-------+----------
# | | |
# | | |
(2 rows)
■参照結果: odbc_fdw(db2)
postgres=# select count(*) from odbc_yyyy_CONNHEADER_SCMDWH_EVENT;
count
-------
1263
(1 row)
postgres=# select * from odbc_yyyy_CONNHEADER_SCMDWH_EVENT;
appl_id | appl_name | client_protocol
---------+-----------+-----------------
# | |
# | |
# | |
# | |
(以下省略)
■定義: odbc_fdw(oracle)
CREATE SERVER odbc_zzzz
FOREIGN DATA WRAPPER odbc_fdw
OPTIONS (dsn 'PANDA-DEV', encoding 'SJIS');
CREATE USER MAPPING FOR postgres
SERVER odbc_zzzz
OPTIONS (odbc_UID 'xxxx', odbc_PWD 'xxxx');
CREATE FOREIGN TABLE
odbc_zzzz_test_tbl4 (
DATA_ID text,
NAME1 text,
NAME2 text,
UPDATE_D date
)
SERVER odbc_zzzz
OPTIONS (
sql_query 'select DATA_ID,NAME1,NAME2,UPDATE_D from ssss.test_tbl',
sql_count 'select count(DATA_ID) from ssss.test_tbl'
);
■定義: odbc_fdw(db2)
CREATE SERVER odbc_yyyy
FOREIGN DATA WRAPPER odbc_fdw
OPTIONS (dsn 'yyyy', encoding 'SJIS');
CREATE USER MAPPING FOR postgres
SERVER odbc_yyyy
OPTIONS (odbc_UID 'xxxx', odbc_PWD 'xxxx');
CREATE FOREIGN TABLE
odbc_yyyy_CONNHEADER_SCMDWH_EVENT (
APPL_ID text,
APPL_NAME text,
CLIENT_PROTOCOL integer
)
SERVER odbc_yyyy
OPTIONS (
sql_query 'select APPL_ID,APPL_NAME,CLIENT_PROTOCOL from aaaa.bbbb_tbl',
sql_count 'select count(APPL_ID) from aaaa.bbbb_tbl'
);