18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RDS(PostgreSQL)の利用前に確認すること

Posted at

RDS(PostgreSQL) で利用できる copy コマンドは Not "copy" である "\copy" になる。
これは RDS では管理者権限がないからである。
この管理者権限がないという状況は、オンプレミスで出来ていたことができなくなるので、事前に確認することをお勧めする。
これは例えば、上記の copy コマンドや共有カタログに対する操作ができない(手動で VACUUM などが実行できないなど)などがある。
 
RDS(PostgreSQL) で注意すること

・\copy コマンドは利用できる

通常の copy コマンドは利用できない。
copy * from stdin は利用できるが、大量データの copy には向かないので利用価値は低い。

[Using COPY]
(http://www.postgresql.org/docs/9.2/static/sql-copy.html)

Using the \copy Command to Import Data to a Table on a PostgreSQL DB Instance

--

注意点
大量データをクライアント側から psql-c で copy する場合、正常に終了しないことが稀にある。
これはプロンプトの反応が無くなってしまったり、"SSL error: sslv3 alert handshake failure" と表示されて接続が切断されることが原因のよう。
ただし上記エラーが出ることは稀で、主にクライアントの画面が固まることが多い。
この場合、"ssl_renegotiation_limit " を使用しないことで問題を回避することができる場合がある。

[ssl_renegotiation_limit]
(http://www.postgresql.org/docs/9.1/static/runtime-config-connection.html)

この機能は名前の通り、どれぐらいで既に SSL で接続されたセッションを再ネゴシエーションするか設定するパラメータである。

・Parameter Group の effective_cache_size の計算

ドキュメントには以下の内容が記載してある。

If you set the memory settings too large for max_connections, shared_buffers, or effective_cache_size, you will prevent the PostgreSQL instance from starting up. Note that some parameters use units that you might not be familiar with; for example, shared_buffers sets the number of 8 KB shared memory buffers used by the server.

わかり難い。

[Working with PostgreSQL Parameters]
(http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html)

実際の計算式は

Memory 15GB の db.r3.large では

effective_cache_size
{DBInstanceClassMemory/16384}
1-2147483647 Allow Values
(8kB) Sets the planners assumption about the size of the disk cache.

15GB memory
15000000000/16384 = 915527 *8 = 7324216 / (1024 * 1024) = 約7GB

--

・dblink の使用

[PostgreSQL on Amazon RDS]
(http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)

1.RDS とオンプレミスの DBLINK による利用 → 可能はず(検証はしていない)
RDS から、オンプレミス環境の DB サーバへは、 オンプレミス環境の DB サーバの IP アドレスを指定。
オンプレミス環境から、RDS へは、DNS 名で接続を行なう。(この場合 DNS 名はプライベート IP に解決)

2.EC2 上 PostgreSQL と RDS の DBLINK による利用 → 可能
ただし、RDS から EC2(PostgreSQL)へ dblink を行なう場合は、EC2(PostgreSQL) の認証方式は_MD5_ 。

・EC2 → RDS
local ec2----.us-west-2.compute.amazonaws.com
remote test22.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com

test=> create extension dblink;
test=> select dblink_connect('conn1','host=test22.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com port=5432 dbname=test user=test password=*****');

test=> select * from dblink('conn1','select * from t_test') AS t(a int, b int);

a | b
---+----
1 | 20
2 | 25
(2 rows)

・RDS → EC2
local test22.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com
remote ec2----.us-west-2.compute.amazonaws.com

t_test=> create extension dblink;
t_test=> select dblink_connect('conn2','host=ec2----.us-west-2.compute.amazonaws.com port=5432 dbname=t_test user=postgres password=*******');
t_test=> select * from dblink('conn2','select * from t_test') AS t(a int, b int);

a | b
---+----
1 | 20
2 | 25
(2 rows)

*EC2側
pg_hba.conf
host all all 0.0.0.0/0  ←適時VPCのsubnetで md5

3.RDS 同士の DBLINK による利用 → 可能

local test0616.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com us-west-2a
remote DB test22.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com us-west-2c

test=> create extension dblink;
test=> select dblink_connect('conn1','host=test23.c9s7xcs7qwj5.us-west-2.rds.amazonaws.com port=5432 dbname=test user=test password=****');
test=> select * from dblink('conn1','select * from t_test') AS t(a int, b int);

a | b
---+----
1 | 20
2 | 25
(2 rows)

--

注意点
"dblink_connect_u" は_NG_

test=> select dblink_connect_u('conn1','host=test23.c9s7xcs7qwj5.us-west-2.rds.a
mazonaws.com port=5432 dbname=test user=test password=******');
ERROR: permission denied for function dblink_connect_u

これは非スーパーユーザでの「ユーザ/パス」省略については、 dblink_connect_u の EXECUTE 権限がないからだと思われる。

実際に確認
test=> SELECT proname,proacl FROM pg_proc WHERE proname = 'dblink_connect_u';
proname | proacl
------------------+-----------------------
dblink_connect_u | {rdsadmin=X/rdsadmin}
dblink_connect_u | {rdsadmin=X/rdsadmin}

確かにない

通常の可能なもの。
test=> SELECT proname,proacl FROM pg_proc WHERE proname = 'dblink_connect';
proname | proacl
----------------+--------
dblink_connect |
dblink_connect |
(2 rows)

[dblink_connect_u]
(http://www.postgresql.jp/document/8.4/html/contrib-dblink-connect-u.html)

まあ他にもあるが、あとは適時検証で。

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?