Python 2対Python 3

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 42章PL/Python - Python手続き言語 | 早送り | 次のページ

# 42.1. Python 2対Python 3

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に変わります。

Python 2用のPL/PythonかPython 3用のPL/Python、またはその両方が利用できるかどうかは、構築時の設定またはインストールしたパッケージに依存します。

> ティップ: どのバージョンのPythonがインストール時に検出されるか、または、`PYTHON`環境変数を使用してバージョンを明示的に設定することで、構築される亜種が決まります。 項15.5を参照してください。 １つのインストレーションで両方のPL/Pythonを利用可能にするためには、ソースツリーでconfigureと構築を２回行う必要があります。

この結果以下のような使用方法と移行戦略となります。

- 既存のユーザおよび現時点で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のみのオペレーティングシステム環境を構築したい、恐れを知らぬユーザは構築スクリプトを変更して、`plpythonu`が`plpython3u`を示すようにすることができます。 ただし、世間一般と互換性がないインストレーションを作成していることを覚えておいてください。

また、Python 3への移植に関する情報についてはPython 3.0における新機能文書を参照してください。

Python 2を基にしたPL/PythonとPython 3を基にしたPL/Pythonを同じセッションで使用することはできません。 動的モジュール内のシンボルが相反するため、こうするとPostgreSQLサーバプロセスがクラッシュしてしまうためです。 あるセッション内でPythonのメジャーバージョンが混在させないための検査があり、不一致が見つかるとセッションは中断されます。 しかし別々のセッションからであれば、同じデータベースにおいて異なるPL/Pythonの両方を使用することができます。

前のページ | ホーム | 次のページ
PL/Python - Python手続き言語 | 上に戻る | PL/Python関数