{"kind": "language", "major": "18", "item": {"slug": "plpythonu", "name": "plpythonu", "name_zh": "", "category": "PL/Python", "summary": "Not recorded in the selected version.", "aliases": [], "content_hash": "693d93f9b9d299b09ef9a44d2c6ccfe17e9c08bab94dea98e070f02569836a3a", "versions": {"10": {"facts": [{"label": "Kind", "value": "Bundled procedural-language variant"}, {"label": "Family", "value": "PL/Python"}, {"label": "Trusted", "value": "f"}, {"label": "Handler", "value": "plpython_call_handler"}, {"label": "Inline handler", "value": "plpython_inline_handler"}, {"label": "Validator", "value": "plpython_validator"}, {"label": "Library", "value": "$libdir/plpython2"}, {"label": "Default version", "value": "1.0"}, {"label": "Module pathname", "value": "$libdir/plpython2"}, {"label": "Comment", "value": "PL/PythonU untrusted procedural language"}], "tables": [], "aliases": [], "related": [{"url": "/docs/10/plpython-data.html", "label": "plpython-data"}, {"url": "/docs/10/plpython-database.html", "label": "plpython-database"}, {"url": "/docs/10/plpython-do.html", "label": "plpython-do"}, {"url": "/docs/10/plpython-envar.html", "label": "plpython-envar"}, {"url": "/docs/10/plpython-funcs.html", "label": "plpython-funcs"}, {"url": "/docs/10/plpython-python23.html", "label": "plpython-python23"}, {"url": "/docs/10/plpython-sharing.html", "label": "plpython-sharing"}, {"url": "/docs/10/plpython-subtransaction.html", "label": "plpython-subtransaction"}, {"url": "/docs/10/plpython-trigger.html", "label": "plpython-trigger"}, {"url": "/docs/10/plpython-util.html", "label": "plpython-util"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "label": "10.23", "major": "10", "channel": "historical", "revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "source_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "catalog_fingerprint": "691be281b476dde4374d7f805b2bacc2e75bdef40f1e9d3d42e91f97fe95cfd0"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "/docs/10/plpython.html", "path": "plpython.html", "label": "PostgreSQL 10 English manual", "sha256": "777855a2e6a6df222fc5e19074d038225bdeba971ad195673ff034adb58aeff1"}], "sections": [{"code": "/* src/pl/plpython/plpythonu--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE PROCEDURAL LANGUAGE plpythonu;\n\nCOMMENT ON PROCEDURAL LANGUAGE plpythonu IS 'PL/PythonU untrusted procedural language';", "title": "Installation definition from the matching source archive", "paragraphs": ["This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "comment": "PL/PythonU untrusted procedural language", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpython2"}, "description": ["PL/PythonU untrusted procedural language"], "manual_html": "<div class=\"chapter\" id=\"PLPYTHON\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\">Chapter\u00a045.\u00a0PL/Python - Python Procedural Language</h2>\n</div>\n</div>\n</div>\n\n\n<p>The <span class=\"application\">PL/Python</span> procedural language allows <span class=\"productname\">PostgreSQL</span> functions to be written in the <a class=\"ulink\" href=\"http://www.python.org\">Python language</a>.</p>\n<p>To install PL/Python in a particular database, use <code class=\"literal\">CREATE EXTENSION plpythonu</code> (but see also <a class=\"xref\" href=\"/docs/10/plpython-python23.html\" title=\"45.1.\u00a0Python 2 vs. Python 3\">Section\u00a045.1</a>).</p>\n<div class=\"tip\">\n<h3 class=\"title\">Tip</h3>\n<p>If a language is installed into <code class=\"literal\">template1</code>, all subsequently created databases will have the language installed automatically.</p>\n</div>\n<p>PL/Python is only available as an <span class=\"quote\">\u201c<span class=\"quote\">untrusted</span>\u201d</span> language, meaning it does not offer any way of restricting what users can do in it and is therefore named <code class=\"literal\">plpythonu</code>. A trusted variant <code class=\"literal\">plpython</code> might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as <code class=\"literal\">plpythonu</code>.</p>\n<div class=\"note\">\n<h3 class=\"title\">Note</h3>\n<p>Users of source packages must specially enable the build of PL/Python during the installation process. (Refer to the installation instructions for more information.) Users of binary packages might find PL/Python in a separate subpackage.</p>\n</div>\n</div>", "manual_path": "/docs/10/plpython.html", "source_files": {"src/pl/plpython/plpythonu.control": "1fa1af3f24d2dab852f17dc3c63e5a6c6ef92a835599202fa270252dce59d285", "src/pl/plpython/plpythonu--1.0.sql": "b4b9b801eefe7fe95b70411012755b4fe99401dd914e936bc9d0b14bf36956be"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0"}, "comparison_hash": "4664ce2e8831b4283a479a5974c64e65ba0c0be65d66e50ede487408aea4c640"}, "11": {"facts": [{"label": "Kind", "value": "Bundled procedural-language variant"}, {"label": "Family", "value": "PL/Python"}, {"label": "Trusted", "value": "f"}, {"label": "Handler", "value": "plpython_call_handler"}, {"label": "Inline handler", "value": "plpython_inline_handler"}, {"label": "Validator", "value": "plpython_validator"}, {"label": "Library", "value": "$libdir/plpython2"}, {"label": "Default version", "value": "1.0"}, {"label": "Module pathname", "value": "$libdir/plpython2"}, {"label": "Comment", "value": "PL/PythonU untrusted procedural language"}], "tables": [], "aliases": [], "related": [{"url": "/docs/11/plpython-data.html", "label": "plpython-data"}, {"url": "/docs/11/plpython-database.html", "label": "plpython-database"}, {"url": "/docs/11/plpython-do.html", "label": "plpython-do"}, {"url": "/docs/11/plpython-envar.html", "label": "plpython-envar"}, {"url": "/docs/11/plpython-funcs.html", "label": "plpython-funcs"}, {"url": "/docs/11/plpython-python23.html", "label": "plpython-python23"}, {"url": "/docs/11/plpython-sharing.html", "label": "plpython-sharing"}, {"url": "/docs/11/plpython-subtransaction.html", "label": "plpython-subtransaction"}, {"url": "/docs/11/plpython-transactions.html", "label": "plpython-transactions"}, {"url": "/docs/11/plpython-trigger.html", "label": "plpython-trigger"}, {"url": "/docs/11/plpython-util.html", "label": "plpython-util"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "label": "11.22", "major": "11", "channel": "historical", "revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "source_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "catalog_fingerprint": "8f21f4444b7f68923f4762af0eb7937fa2907026e91249483e79050de012c901"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "/docs/11/plpython.html", "path": "plpython.html", "label": "PostgreSQL 11 English manual", "sha256": "6612b4c6b8dba6b9955dcd42a8c833715fe386b40b40aac2c9ea3743516726c1"}], "sections": [{"code": "/* src/pl/plpython/plpythonu--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE PROCEDURAL LANGUAGE plpythonu;\n\nCOMMENT ON PROCEDURAL LANGUAGE plpythonu IS 'PL/PythonU untrusted procedural language';", "title": "Installation definition from the matching source archive", "paragraphs": ["This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "comment": "PL/PythonU untrusted procedural language", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpython2"}, "description": ["PL/PythonU untrusted procedural language"], "manual_html": "<div class=\"chapter\" id=\"PLPYTHON\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\">Chapter\u00a046.\u00a0PL/Python - Python Procedural Language</h2>\n</div>\n</div>\n</div>\n\n<p>The <span class=\"application\">PL/Python</span> procedural language allows <span class=\"productname\">PostgreSQL</span> functions and procedures to be written in the <a class=\"ulink\" href=\"https://www.python.org\">Python language</a>.</p>\n<p>To install PL/Python in a particular database, use <code class=\"literal\">CREATE EXTENSION plpythonu</code> (but see also <a class=\"xref\" href=\"/docs/11/plpython-python23.html\" title=\"46.1.\u00a0Python 2 vs. Python 3\">Section\u00a046.1</a>).</p>\n<div class=\"tip\">\n<h3 class=\"title\">Tip</h3>\n<p>If a language is installed into <code class=\"literal\">template1</code>, all subsequently created databases will have the language installed automatically.</p>\n</div>\n<p>PL/Python is only available as an <span class=\"quote\">\u201c<span class=\"quote\">untrusted</span>\u201d</span> language, meaning it does not offer any way of restricting what users can do in it and is therefore named <code class=\"literal\">plpythonu</code>. A trusted variant <code class=\"literal\">plpython</code> might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as <code class=\"literal\">plpythonu</code>.</p>\n<div class=\"note\">\n<h3 class=\"title\">Note</h3>\n<p>Users of source packages must specially enable the build of PL/Python during the installation process. (Refer to the installation instructions for more information.) Users of binary packages might find PL/Python in a separate subpackage.</p>\n</div>\n</div>", "manual_path": "/docs/11/plpython.html", "source_files": {"src/pl/plpython/plpythonu.control": "1fa1af3f24d2dab852f17dc3c63e5a6c6ef92a835599202fa270252dce59d285", "src/pl/plpython/plpythonu--1.0.sql": "b4b9b801eefe7fe95b70411012755b4fe99401dd914e936bc9d0b14bf36956be"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0"}, "comparison_hash": "4664ce2e8831b4283a479a5974c64e65ba0c0be65d66e50ede487408aea4c640"}, "12": {"facts": [{"label": "Kind", "value": "Bundled procedural-language variant"}, {"label": "Family", "value": "PL/Python"}, {"label": "Trusted", "value": "f"}, {"label": "Handler", "value": "plpython_call_handler"}, {"label": "Inline handler", "value": "plpython_inline_handler"}, {"label": "Validator", "value": "plpython_validator"}, {"label": "Library", "value": "$libdir/plpython2"}, {"label": "Default version", "value": "1.0"}, {"label": "Module pathname", "value": "$libdir/plpython2"}, {"label": "Comment", "value": "PL/PythonU untrusted procedural language"}], "tables": [], "aliases": [], "related": [{"url": "/docs/12/plpython-data.html", "label": "plpython-data"}, {"url": "/docs/12/plpython-database.html", "label": "plpython-database"}, {"url": "/docs/12/plpython-do.html", "label": "plpython-do"}, {"url": "/docs/12/plpython-envar.html", "label": "plpython-envar"}, {"url": "/docs/12/plpython-funcs.html", "label": "plpython-funcs"}, {"url": "/docs/12/plpython-python23.html", "label": "plpython-python23"}, {"url": "/docs/12/plpython-sharing.html", "label": "plpython-sharing"}, {"url": "/docs/12/plpython-subtransaction.html", "label": "plpython-subtransaction"}, {"url": "/docs/12/plpython-transactions.html", "label": "plpython-transactions"}, {"url": "/docs/12/plpython-trigger.html", "label": "plpython-trigger"}, {"url": "/docs/12/plpython-util.html", "label": "plpython-util"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "label": "12.22", "major": "12", "channel": "historical", "revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "source_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "catalog_fingerprint": "9f857f4ee4875f9c7de6bfc9df4b757dec8b3a0bb88eadb519c7bd267bd56149"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "/docs/12/plpython.html", "path": "plpython.html", "label": "PostgreSQL 12 English manual", "sha256": "0f4eac1e31aff3e6ae5dc99e7bc6c34c50ab44222ab12d1c578a86ea5af19a33"}], "sections": [{"code": "/* src/pl/plpython/plpythonu--1.0.sql */\n\n/*\n * Currently, all the interesting stuff is done by CREATE LANGUAGE.\n * Later we will probably \"dumb down\" that command and put more of the\n * knowledge into this script.\n */\n\nCREATE LANGUAGE plpythonu;\n\nCOMMENT ON LANGUAGE plpythonu IS 'PL/PythonU untrusted procedural language';", "title": "Installation definition from the matching source archive", "paragraphs": ["This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "comment": "PL/PythonU untrusted procedural language", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpython2"}, "description": ["PL/PythonU untrusted procedural language"], "manual_html": "<div class=\"chapter\" id=\"PLPYTHON\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\">Chapter\u00a045.\u00a0PL/Python - Python Procedural Language</h2>\n</div>\n</div>\n</div>\n\n<p>The <span class=\"application\">PL/Python</span> procedural language allows <span class=\"productname\">PostgreSQL</span> functions and procedures to be written in the <a class=\"ulink\" href=\"https://www.python.org\">Python language</a>.</p>\n<p>To install PL/Python in a particular database, use <code class=\"literal\">CREATE EXTENSION plpythonu</code> (but see also <a class=\"xref\" href=\"/docs/12/plpython-python23.html\" title=\"45.1.\u00a0Python 2 vs. Python 3\">Section\u00a045.1</a>).</p>\n<div class=\"tip\">\n<h3 class=\"title\">Tip</h3>\n<p>If a language is installed into <code class=\"literal\">template1</code>, all subsequently created databases will have the language installed automatically.</p>\n</div>\n<p>PL/Python is only available as an <span class=\"quote\">\u201c<span class=\"quote\">untrusted</span>\u201d</span> language, meaning it does not offer any way of restricting what users can do in it and is therefore named <code class=\"literal\">plpythonu</code>. A trusted variant <code class=\"literal\">plpython</code> might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as <code class=\"literal\">plpythonu</code>.</p>\n<div class=\"note\">\n<h3 class=\"title\">Note</h3>\n<p>Users of source packages must specially enable the build of PL/Python during the installation process. (Refer to the installation instructions for more information.) Users of binary packages might find PL/Python in a separate subpackage.</p>\n</div>\n</div>", "manual_path": "/docs/12/plpython.html", "source_files": {"src/pl/plpython/plpythonu.control": "1fa1af3f24d2dab852f17dc3c63e5a6c6ef92a835599202fa270252dce59d285", "src/pl/plpython/plpythonu--1.0.sql": "28aa6cc99d0c72b9a8e69aaa537ff8c1489e72c6465a1f4ef8dc568f21ce57ff"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0"}, "comparison_hash": "4664ce2e8831b4283a479a5974c64e65ba0c0be65d66e50ede487408aea4c640"}, "13": {"facts": [{"label": "Kind", "value": "Bundled procedural-language variant"}, {"label": "Family", "value": "PL/Python"}, {"label": "Trusted", "value": "f"}, {"label": "Handler", "value": "plpython_call_handler"}, {"label": "Inline handler", "value": "plpython_inline_handler"}, {"label": "Validator", "value": "plpython_validator"}, {"label": "Library", "value": "$libdir/plpython2"}, {"label": "Default version", "value": "1.0"}, {"label": "Module pathname", "value": "$libdir/plpython2"}, {"label": "Comment", "value": "PL/PythonU untrusted procedural language"}], "tables": [], "aliases": [], "related": [{"url": "/docs/13/plpython-data.html", "label": "plpython-data"}, {"url": "/docs/13/plpython-database.html", "label": "plpython-database"}, {"url": "/docs/13/plpython-do.html", "label": "plpython-do"}, {"url": "/docs/13/plpython-envar.html", "label": "plpython-envar"}, {"url": "/docs/13/plpython-funcs.html", "label": "plpython-funcs"}, {"url": "/docs/13/plpython-python23.html", "label": "plpython-python23"}, {"url": "/docs/13/plpython-sharing.html", "label": "plpython-sharing"}, {"url": "/docs/13/plpython-subtransaction.html", "label": "plpython-subtransaction"}, {"url": "/docs/13/plpython-transactions.html", "label": "plpython-transactions"}, {"url": "/docs/13/plpython-trigger.html", "label": "plpython-trigger"}, {"url": "/docs/13/plpython-util.html", "label": "plpython-util"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "label": "13.23", "major": "13", "channel": "historical", "revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "source_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "catalog_fingerprint": "c7015c845255c9d721c547c8ab9ef37825d332588c9691d982e6906b7d571002"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "/docs/13/plpython.html", "path": "plpython.html", "label": "PostgreSQL 13 English manual", "sha256": "5aee74b10a6edbfc58ef0eaea73e5b33975c31f01bdb30741676c261023e88c4"}], "sections": [{"code": "/* src/pl/plpython/plpythonu--1.0.sql */\n\nCREATE FUNCTION plpython_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpython_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpython_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE LANGUAGE plpythonu\n  HANDLER plpython_call_handler\n  INLINE plpython_inline_handler\n  VALIDATOR plpython_validator;\n\nCOMMENT ON LANGUAGE plpythonu IS 'PL/PythonU untrusted procedural language';", "title": "Installation definition from the matching source archive", "paragraphs": ["This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "comment": "PL/PythonU untrusted procedural language", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpython2"}, "description": ["PL/PythonU untrusted procedural language"], "manual_html": "<div class=\"chapter\" id=\"PLPYTHON\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\">Chapter\u00a045.\u00a0PL/Python \u2014 Python Procedural Language</h2>\n</div>\n</div>\n</div>\n\n<p>The <span class=\"application\">PL/Python</span> procedural language allows <span class=\"productname\">PostgreSQL</span> functions and procedures to be written in the <a class=\"ulink\" href=\"https://www.python.org\">Python language</a>.</p>\n<p>To install PL/Python in a particular database, use <code class=\"literal\">CREATE EXTENSION plpythonu</code> (but see also <a class=\"xref\" href=\"/docs/13/plpython-python23.html\" title=\"45.1.\u00a0Python 2 vs. Python 3\">Section\u00a045.1</a>).</p>\n<div class=\"tip\">\n<h3 class=\"title\">Tip</h3>\n<p>If a language is installed into <code class=\"literal\">template1</code>, all subsequently created databases will have the language installed automatically.</p>\n</div>\n<p>PL/Python is only available as an <span class=\"quote\">\u201c<span class=\"quote\">untrusted</span>\u201d</span> language, meaning it does not offer any way of restricting what users can do in it and is therefore named <code class=\"literal\">plpythonu</code>. A trusted variant <code class=\"literal\">plpython</code> might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as <code class=\"literal\">plpythonu</code>.</p>\n<div class=\"note\">\n<h3 class=\"title\">Note</h3>\n<p>Users of source packages must specially enable the build of PL/Python during the installation process. (Refer to the installation instructions for more information.) Users of binary packages might find PL/Python in a separate subpackage.</p>\n</div>\n</div>", "manual_path": "/docs/13/plpython.html", "source_files": {"src/pl/plpython/plpythonu.control": "1fa1af3f24d2dab852f17dc3c63e5a6c6ef92a835599202fa270252dce59d285", "src/pl/plpython/plpythonu--1.0.sql": "70bad78157392ad1efe970053f5d54bae45a61e10670a373cca5432f2b91dce3"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0"}, "comparison_hash": "4664ce2e8831b4283a479a5974c64e65ba0c0be65d66e50ede487408aea4c640"}, "14": {"facts": [{"label": "Kind", "value": "Bundled procedural-language variant"}, {"label": "Family", "value": "PL/Python"}, {"label": "Trusted", "value": "f"}, {"label": "Handler", "value": "plpython_call_handler"}, {"label": "Inline handler", "value": "plpython_inline_handler"}, {"label": "Validator", "value": "plpython_validator"}, {"label": "Library", "value": "$libdir/plpython2"}, {"label": "Default version", "value": "1.0"}, {"label": "Module pathname", "value": "$libdir/plpython2"}, {"label": "Comment", "value": "PL/PythonU untrusted procedural language"}], "tables": [], "aliases": [], "related": [{"url": "/docs/14/plpython-data.html", "label": "plpython-data"}, {"url": "/docs/14/plpython-database.html", "label": "plpython-database"}, {"url": "/docs/14/plpython-do.html", "label": "plpython-do"}, {"url": "/docs/14/plpython-envar.html", "label": "plpython-envar"}, {"url": "/docs/14/plpython-funcs.html", "label": "plpython-funcs"}, {"url": "/docs/14/plpython-python23.html", "label": "plpython-python23"}, {"url": "/docs/14/plpython-sharing.html", "label": "plpython-sharing"}, {"url": "/docs/14/plpython-subtransaction.html", "label": "plpython-subtransaction"}, {"url": "/docs/14/plpython-transactions.html", "label": "plpython-transactions"}, {"url": "/docs/14/plpython-trigger.html", "label": "plpython-trigger"}, {"url": "/docs/14/plpython-util.html", "label": "plpython-util"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "label": "14.24", "major": "14", "channel": "stable", "revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "source_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "catalog_fingerprint": "b272e6a82e4c46efda81c3a6a4cdf7de6a83dfff7f02f226a392fbe9acdd3adb"}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "/docs/14/plpython.html", "path": "plpython.html", "label": "PostgreSQL 14 English manual", "sha256": "3c84c78db04798bdd98ee4320a8d26749337373d29e6f05c0a76997f03b73b61"}], "sections": [{"code": "/* src/pl/plpython/plpythonu--1.0.sql */\n\nCREATE FUNCTION plpython_call_handler() RETURNS language_handler\n  LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpython_inline_handler(internal) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE FUNCTION plpython_validator(oid) RETURNS void\n  STRICT LANGUAGE c AS 'MODULE_PATHNAME';\n\nCREATE LANGUAGE plpythonu\n  HANDLER plpython_call_handler\n  INLINE plpython_inline_handler\n  VALIDATOR plpython_validator;\n\nCOMMENT ON LANGUAGE plpythonu IS 'PL/PythonU untrusted procedural language';", "title": "Installation definition from the matching source archive", "paragraphs": ["This extension is shipped with the source. Its presence does not establish that the language or external runtime is installed."]}], "signature": "", "attributes": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "comment": "PL/PythonU untrusted procedural language", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0", "module_pathname": "$libdir/plpython2"}, "description": ["PL/PythonU untrusted procedural language"], "manual_html": "<div class=\"chapter\" id=\"PLPYTHON\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\">Chapter\u00a046.\u00a0PL/Python \u2014 Python Procedural Language</h2>\n</div>\n</div>\n</div>\n\n<p>The <span class=\"application\">PL/Python</span> procedural language allows <span class=\"productname\">PostgreSQL</span> functions and procedures to be written in the <a class=\"ulink\" href=\"https://www.python.org\">Python language</a>.</p>\n<p>To install PL/Python in a particular database, use <code class=\"literal\">CREATE EXTENSION plpythonu</code> (but see also <a class=\"xref\" href=\"/docs/14/plpython-python23.html\" title=\"46.1.\u00a0Python 2 vs. Python 3\">Section\u00a046.1</a>).</p>\n<div class=\"tip\">\n<h3 class=\"title\">Tip</h3>\n<p>If a language is installed into <code class=\"literal\">template1</code>, all subsequently created databases will have the language installed automatically.</p>\n</div>\n<p>PL/Python is only available as an <span class=\"quote\">\u201c<span class=\"quote\">untrusted</span>\u201d</span> language, meaning it does not offer any way of restricting what users can do in it and is therefore named <code class=\"literal\">plpythonu</code>. A trusted variant <code class=\"literal\">plpython</code> might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as <code class=\"literal\">plpythonu</code>.</p>\n<div class=\"note\">\n<h3 class=\"title\">Note</h3>\n<p>Users of source packages must specially enable the build of PL/Python during the installation process. (Refer to the installation instructions for more information.) Users of binary packages might find PL/Python in a separate subpackage.</p>\n</div>\n</div>", "manual_path": "/docs/14/plpython.html", "source_files": {"src/pl/plpython/plpythonu.control": "1fa1af3f24d2dab852f17dc3c63e5a6c6ef92a835599202fa270252dce59d285", "src/pl/plpython/plpythonu--1.0.sql": "70bad78157392ad1efe970053f5d54bae45a61e10670a373cca5432f2b91dce3"}, "comparison_data": {"kind": "Bundled procedural-language variant", "family": "PL/Python", "handler": "plpython_call_handler", "library": "$libdir/plpython2", "trusted": "f", "validator": "plpython_validator", "inline_handler": "plpython_inline_handler", "default_version": "1.0"}, "comparison_hash": "4664ce2e8831b4283a479a5974c64e65ba0c0be65d66e50ede487408aea4c640"}}}, "snapshot": null, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}