0
1

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 3 years have passed since last update.

PostgreSQLのJDBCドライバでの接続文字列でwork_memなどを指定する

Last updated at Posted at 2021-06-22

こういったことをする人はあまりいないと思うんですけど、仕事で必要になったので調べたことをメモ代わりに。
あと、PostgreSQLのJDBCの接続文字列に指定できるoptionsの記事があまり見つからなかったので。

多分、皆さんJavaでPostgreSQLに接続する場合、接続文字列ってこう書くと思います。

jdbc:postgresql://host:port/dbname

これにパラメタを指定できるんですね(最近知りました)

jdbc:postgresql://host:port/dbname?param1=value1&param2=value2&...

例えば、アプリケーション名を指定する場合以下のように指定します。

jdbc:postgresql://host:port/dbname?ApplicationName=hogehoge

これを指定すると、SELECT * FROM pg_stat_activity;なんかを実行すると、application_nameカラムにhogehogeと表示されます。
複数のシステムから接続するようなDBなんかでは重宝しますね。
(これはやってる人がいっぱいいそう)

で、本題。
接続文字列でwork_memとかも指定可能です。

jdbc:postgresql://host:port/dbname?ApplicationName=hogehoge&options=-c work_mem=1GB

さらに複数指定したい場合はこんな感じで書くことができます。

jdbc:postgresql://host:port/dbname?ApplicationName=hogehoge&options=-c work_mem=1GB -c enable_nestloop=off

ちなみに、今回はJava 1.6で動かさないといけなくて、どこから動くか確認したところ、postgresql-42.2.6.jre6.jarから動くようです。
ただ、なぜかpostgresql-42.2.15.jre6.jarはエラーになりました。なんだったんだろう・・・?
(たまたま古いJDBCドライバを使っているシステムでoptionsを指定したくなってやったらできなかった)
時間があるときに、Java1.6以外も調べたいところ。

複数のシステムから接続するPostgreSQLがある場合、あるシステムではwork_memを多めに、または少なめに設定したい、といった場合に使ったり、あるシステムではクエリプランを制御するために特定の設定を変える、というようなシーンで利用できると思います。

参考

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?