Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/Python - linguaggio procedurale python
PrecedentePL/Perl Under the HoodFunzioni PL/PythonSuccessivo

42. PL/Python - linguaggio procedurale python

Il linguaggio procedurale PL/Python permette di scrivere funzioni PostgreSQL™ in linguaggio Python.

Per installare PL/Python in un particolare database, usare createlang plpythonu dbname (ma si veda anche Sezione 42.1, «Python 2 vs. Python 3»).

[Suggerimento]

Suggerimento

Se un linguaggio è installato in template1, tutti i database creati successivamente avranno il linguaggio installato automaticamente.

Da PostgreSQL™ 7.4, PL/Python è disponibile solo come linguaggio «untrusted», che significa che non offre nessun modo di restringere quello che gli utenti possono farci. È quindi stato rinominato in plpythonu. La variante trusted di plpython potrebbe diventare disponibile in futuro, e un nuovo meccanismo sicuro di esecuzione è sviluppato in Python. Chi scrive una funzione in PL/Python untrusted deve fare attenzione che la funzione non possa essere usata per fare niente di non voluto, dato che sarà capace di fare qualsiasi cosa che può essere fatta da un utente loggato come amministratore del database. Solo i superutenti possono creare funzioni in linguaggi untrusted tipo plpythonu.

[Nota]

Nota

Specialmente gli utenti dei pacchetti sorgente devono abilitare la compilazione di PL/Python durante il processo di installazione. (Fare riferimento alle istruzioni di installazione per maggiori informazioni). Gli utenti dei pacchetti binari potrebbero trovare PL/Python in un pacchetto separato.

42.1. Python 2 vs. Python 3

PL/Python supporta le varianti del linguaggio Python 2 e Python 3. (Le istruzioni di installazione di PostgreSQL potrebbero contenere informazioni più precise sulle versioni minori di Python supportate). Dato che le varianti di linguaggio Python 2 e Python 3 sono incompatibili in alcuni aspetti importanti, il seguente schema di nomenclatura e transizione viene usato da PL/Python per evitare di mischiarli:

  • Il linguaggio PostgreSQL chiamato plpython2u implementa PL/Python basato sulla variante Python 2 del linguaggio.

  • Il linguaggio PostgreSQL chiamato plpython3u implementa PL/Python basato sulla variante Python 3 del linguaggio.

  • Il linguaggio chiamato plpythonu implementa PL/Python basato sulla variante predefinita del linguaggio Python, che è correntemente Python 2. (Questo è indipendente da quello che qualsiasi installazione locale di Python potrebbe considerare come proprio «predefinito», per esempio, quello che potrebbe essere /usr/bin/python). Il valore predefinito sarà probabilmente cambiato in Python 3 in una versione futura di PostgreSQL, in dipendenza dei progressi della migrazione a Python 3 nella comunità Python.

Dipende dalla configurazione di compilazione o dai pacchetti installati se PL/Python per Python 2 o Python 3 o entrambi è disponibile.

[Suggerimento]

Suggerimento

La variante compilata dipende da quale versione di Python è stata trovata durante l'installazione o quale versione è stata esplicitamente impostata usando la variabile d'ambiente PYTHON; si veda Sezione 15.5, «Installation Procedure». Per rendere disponibili entrambe le varianti di PL/Python in una installazione, il sorgente deve essere configurato e compilato due volte.

Questo risulta nella seguente strategia si utilizzo e migrazione:

  • Utenti esistenti che non sono attualmente interessati a Python 3 usino il nome di linguaggio plpythonu e non dovranno cambiare niente nell'immediato futuro. È raccomandato gradualmente «testare il futuro» del codice migrando a Python 2.6/2.7 per semplificare l'eventuale migrazione a Python 3.

    In pratica, molte funzioni PL/Python migreranno a Python 3 con pochi o nessun cambiamento.

  • Utenti che sanno di avere codice fortemente dipendente da Python 2 e non hanno intenzione ci cambiarlo possono usare il nome di linguaggio plpython2u. Questo continuerà a funzionare in un futuro remoto, finchè il support a Python 2 potrebbe essere completamente eliminato da PostgreSQL.

  • Gli utenti che vogliono tuffarsi in Python 3 possono usare il nome di linguaggio plpython3u, che continuerà a funzionare per sempre per gli standard di oggi. In un futuro remoto quando Python 3 potrebbe diventare predefinito, potrebbero voler rimuovere il «3» per ragioni estetiche.

  • I temerari che vogliono compilare un ambiente che supporta solo Python 3, possono cambiare gli script di compilazione per rendere plpythonu equivalente a plpython3u, tenendo a mente che questo renderebbe la loro installazione incompatibile con la maggior parte del resto del mondo.

Vedere anche il documento New In Python 3.0 per maggiori informazioni sul porting a Python 3.

Non è permesso usare PL/Python basato su Python 2 e Pl/Python basato su Python 3 nella stessa sessione, dato che i simboli nei moduli dinamici andrebbero in conflitto, che potrebbero risultare in crash del processo server PostgreSQL. C'è un controllo che previene il mescolamento di versioni di Python in una sessione, che annullerà la sessione se viene riscontrato un conflitto. È possibile, comunque, usare entrambe le varianti PL/Python nello stesso database, da sessioni separate.

Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/Python - linguaggio procedurale python
PrecedentePL/Perl Under the HoodFunzioni PL/PythonSuccessivo