PL/PythonはPython 2およびPython 3言語の両方をサポートします。 (PostgreSQLのインストール手順では、サポートするPythonの細かなマイナーバージョンに関して、より正確な情報が記載されています。) Python 2及びPython 3言語には重要な側面でいくつか互換性がありませんので、混在を防ぐためにPL/Pythonでは以下の命名ならびに移行計画が使用されています。
plpython2u
という名前のPostgreSQL言語はPython 2言語に基づいたPL/Pythonを実装します。
plpython3u
という名前のPostgreSQL言語はPython 3言語に基づいたPL/Pythonを実装します。
plpythonu
という名前の言語はデフォルトのPython言語(現時点ではPython 2)に基づいたPL/Pythonを実装します。
(このデフォルトはどのローカルにインストールされたPythonがその「デフォルト」とみなされるか、例えば/usr/bin/python
が何を示すか、とは独立しています。)
PythonコミュニティにおけるPython 3への移行の進行状況に依存しますが、おそらく近い将来のPostgreSQLのデフォルトはPython 3に変わります。
この計画は、PEP 394内の、python
コマンドの命名と移行に関する推奨に類似しています。
Python 2用のPL/PythonかPython 3用のPL/Python、またはその両方が利用できるかどうかは、構築時の設定またはインストールしたパッケージに依存します。
どのバージョンのPythonがインストール時に検出されるか、または、PYTHON
環境変数を使用してバージョンを明示的に設定することで、構築される亜種が決まります。
16.4を参照してください。
1つのインストレーションで両方のPL/Pythonを利用可能にするためには、ソースツリーでconfigureと構築を2回行う必要があります。
この結果以下のような使用方法と移行戦略となります。
既存のユーザおよび現時点でPython 3に興味を持たないユーザはplpythonu
という名前の言語を使用し、当分の間何も変更する必要はありません。
最終的なPython 3への移行を簡単にするために、Python 2.6/2.7への移行を介してコードを少しずつ「将来に備える」ことを勧めます。
実際には、多くのPL/Python関数はそのまま、またはわずかな変更を行うことでPython 3に移行されます。
Python 2に大きく依存するコードがあることが分かっていて、変更する予定がないユーザはplpython2u
言語名を使用することができます。
これは、PostgreSQLでPython 2のサポートが完全になくなる、非常に先の将来まで動作し続けます。
Python 3に挑戦したいユーザは、現在の標準では永久に動作し続けるplpython3u
言語名を使用できます。
遠い将来、Python 3がデフォルトになった時、美的な理由から「3」という文字はなくなることになるでしょう。
Python 3のみのオペレーティングシステム環境を構築したい、恐れを知らぬユーザは、pg_pltemplate
の内容を変更して、plpythonu
がplpython3u
を示すようにすることができます。
ただし、世間一般と互換性がないインストレーションを作成していることを覚えておいてください。
また、Python 3への移植に関する情報についてはPython 3.0における新機能文書を参照してください。
Python 2を基にしたPL/PythonとPython 3を基にしたPL/Pythonを同じセッションで使用することはできません。 動的モジュール内のシンボルが相反するため、こうするとPostgreSQLサーバプロセスがクラッシュしてしまうためです。 あるセッション内でPythonのメジャーバージョンが混在させないための検査があり、不一致が見つかるとセッションは中断されます。 しかし別々のセッションからであれば、同じデータベースにおいて異なるPL/Pythonの両方を使用することができます。