CentOS7にPostgreSQLをインストールし、FDW(SQLServer・Mysql用)を構成しましたので、備忘録を残したいと思います。
1、FDWとは
FDWとは、SELECT文やUPDATE文などのSQL文を使用して、外部にあるデータにアクセスできるようにするための、PostgreSQLの拡張機能です。詳しくは以下のリンクを参照してください。
その為、初めにPostgreSQLをサーバにインストールする必要があります。RDSでも一部のFDWに対応していますが、自身で必要なFDWをインストールすることはできません。(マネージドサービスだからしょうがない)
Amazon RDS for PostgreSQL のバージョンと拡張機能
各FDWの詳細は、以下のリンクを参照してください。
・MySQL参照用FDW
・SQLServer参照用FDW
なお、現時点で「tds_fdw」はSQLServerの参照のみできます。
2、PostgreSQLのインストール
ここではCentOS7にPostgreSQLをインストールする手順を記述します。既にPostgreSQLをインストールしている場合はスキップします。インストール先はEC2上のCentOS7にインストールすることを想定しています。
1、管理者権限昇格
sudo -i
2、アップデート
yum update
reboot
3、リポジトリ追加 ※ログイン後、管理者権限に昇格
rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
4、インストール
yum -y install postgresql12-server postgresql12-contrib
5、インストール確認
ls -l /usr/pgsql-12/
※「bin doc lib share」
があること
6、自動起動有効化
systemctl enable postgresql-12.service
7、DBデータ保存先変更※必要な場合
vi /usr/lib/systemd/system/postgresql-12.service
==================================================
変更前)
Environment=PGDATA=/var/lib/pgsql/12/data/
変更後)
Environment=PGDATA=/data/
==================================================
8、変更適用
systemctl daemon-reload
9、初期DB作成
PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-12/bin/postgresql-12-setup initdb
10、作成確認
cat /data/PG_VERSION
※「/data」は「7、」で変更したパスを入力
※「12」が表示されること
11、「postgres」ユーザーへ切り替え
su - postgres
12、パスの追加
※/var/lib/pgsql/.pgsql_profileにパスを追加します。
vi /var/lib/pgsql/.pgsql_profile
==================================================
PATH=/usr/pgsql-12/bin:$PATH
export PATH
==================================================
※PGDATAを修正します。
vi /var/lib/pgsql/.bash_profile
==================================================
#PGDATA=/var/lib/pgsql/12/data
PGDATA=/data
==================================================
※「/data」は「7、」で変更したパスを入力
13、設定反映
source ~/.bash_profile
14、DB起動
pg_ctl start
15、バージョン確認
psql -V
16、データベース確認
psql -l
17、外部接続許可
vi /data/postgresql.conf
==================================================
変更前)
#listen_addresses = 'localhost'
変更後)
listen_addresses = '*'
==================================================
※セキュリティグループでインバウンドルールが許可されていることも確認
18、postgresユーザーを抜ける
exit
3、FDWのインストール
3-1、Mysql用FDWの設定
1、管理者権限昇格
sudo -i
2、mysql用リポジトリ追加
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
3、「mysql-community-devel」インストール
yum -y install mysql-community-devel
4、FDWインストールに必要なパッケージインストール
yum -y install epel-release centos-release-scl
yum -y install git gcc wget postgresql12-devel
5、mysql用FDWのソースコードをダウンロード
cd /tmp
git clone https://github.com/EnterpriseDB/mysql_fdw.git
cd /tmp/mysql_fdw/
6、パス設定
export PATH=/usr/pgsql-12/bin/:$PATH
export PATH=/usr/bin/:$PATH
7、FDWインストール
make USE_PGXS=1
make USE_PGXS=1 install
3-2、SQLServer用FDWの設定
1、管理者権限昇格
sudo -i
2、FreeTDSダウンロード
cd /tmp
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-X.X.X.tar.gz
※最新バージョンは以下を確認する。
https://www.freetds.org/
3、圧縮ファイル解凍
tar xvzf freetds-X.X.X.tar.gz
4、FreeTDSインストール
cd freetds-X.X.X/
./configure --with-openssl=/bin/openssl --with-tdsver=7.4
make
make install
5、パス設定
vi /root/.bash_profile
最終行に以下を追加する
export PATH=${PATH}:/usr/local/bin
6、パス有効化
source ~/.bash_profile
7、FreeTDSインストール確認
tsql -C
※以下の様な出力があること
================================
Compile-time settings (established with the "configure" script)
Version: freetds vX.X.X
freetds.conf directory: /usr/local/etc
MS db-lib source compatibility: no
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 7.4
iODBC: no
unixodbc: no
SSPI "trusted" logins: no
Kerberos: no
OpenSSL: yes
GnuTLS: no
MARS: yes
================================
8、SqlServer用FDWのソースコードをダウンロード
cd /tmp
git clone https://github.com/tds-fdw/tds_fdw.git
cd tds_fdw
9、FDWインストール
make USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config
make USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config install
10、パス設定
cd /usr/lib64
ln /usr/local/lib/libsybdb.so.5.1.0 libsybdb.so.5
11、確認
ls -l libsybdb.so.5
4、DB設定など
1、ユーザー切り替え
su - postgres
2、DBユーザー作成
createuser --login --pwprompt username
Enter password for new role: <任意のパスワード>
Enter it again: <任意のパスワード>
3、DB作成
createdb --owner=username dbname
4、接続設定変更
vi /data/pg_hba.conf
==================================================
# "local" is for Unix domain socket connections only
local dbname username md5
→ローカルからdbnameへusernameでmd5接続できるように1行追加。※最上位行に記載
host all all 0.0.0.0/0 trust
→全ホストから接続できる様にする
local all all peer
# IPv4 local connections:
host all all 192.168.10.0/24 md5
→192.168.10.0/24から接続できるように1行追加。
host all all 127.0.0.1/32 ident
==================================================
5、設定読み込み
pg_ctl reload
6、DBへログイン
psql -U postgres
7、権限変更
ALTER ROLE username SUPERUSER;
quit
8、FDW設定先DBへ切り替え
psql dbname username
9、FDW有効化
CREATE EXTENSION mysql_fdw;
CREATE EXTENSION tds_fdw;
10、FDW MySql設定
※詳細な利用方法は以下のGitを参照する。
「https://github.com/EnterpriseDB/mysql_fdw」
CREATE SERVER <サーバ名>
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '<エンドポイント>', port '3306');
CREATE USER MAPPING FOR <ユーザー名>
SERVER <サーバ名>
OPTIONS (username '<参照先DBのユーザー名>', password '<参照先DBのパスワード>');
CREATE FOREIGN TABLE <テーブル名>(
<カラム設定>
※カラム設定は参照先テーブルと同様の状態にする。
)
SERVER <サーバ名>
OPTIONS (dbname '<参照先DBのDB名>', table_name '<参照先DBのテーブル名>');
11、FDW SQLServer設定
※詳細な利用方法は以下のGitを参照する。
「https://github.com/tds-fdw/tds_fdw」
※AWS
CREATE SERVER <サーバ名>
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername '<エンドポイント>', port '1433', database '<参照先DBのDB名>', tds_version '7.4');
CREATE USER MAPPING FOR <ユーザー名>
SERVER <サーバ名>
OPTIONS (username '<参照先DBのユーザー名>', password '<参照先DBのパスワード>');
CREATE FOREIGN TABLE <テーブル名> (
<カラム設定>
※カラム設定は参照先テーブルと同様の状態にする。
)
SERVER <サーバ名>
OPTIONS (table_name '<参照先DBのテーブル名>');
※Azure
CREATE SERVER azure_svr
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername 'IPアドレス', port '1433', database '<参照先DBのDB名>', tds_version '7.4');
CREATE USER MAPPING FOR <ユーザー名>
SERVER <サーバ名>
OPTIONS (username '<参照先DBのユーザー名>@<参照先DBのサーバ名>', password '<参照先DBのパスワード>');
CREATE FOREIGN TABLE <テーブル名> (
<カラム設定>
※カラム設定は参照先テーブルと同様の状態にする。
)
SERVER <サーバ名>
OPTIONS (table_name '<参照先DBのテーブル名>');