IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

PREPARE

PREPARE — prépare une instruction pour exécution

Synopsis

PREPARE nom [ (type_données [, ...] ) ] AS instruction

Description

PREPARE crée une instruction préparée. Une instruction préparée est un objet c�té serveur qui peut �tre utilisé pour optimiser les performances. Quand l'instruction PREPARE est exécutée, l'instruction spécifiée est lue, analysée et réécrite. Quand une commande EXECUTE est lancée par la suite, l'instruction préparée est planifiée et exécutée. Cette division du travail évite une analyse répétitive tout en permettant au plan d'exécution de dépendre des valeurs spécifiques du param�tre.

Les instructions préparées peuvent prendre des param�tres : les valeurs sont substituées dans l'instruction lorsqu'elle est exécutée. Lors de la création de l'instruction préparée, faites référence aux param�tres suivant leur position, $1, $2, etc. Une liste correspondante des types de données des param�tres peut �tre spécifiée si vous le souhaitez. Quand le type de donnée d'un param�tre n'est pas indiqué ou est déclaré comme inconnu (unknown), le type est inféré � partir du contexte dans lequel le param�tre est utilisé (si possible). Lors de l'exécution de l'instruction, indiquez les valeurs réelles de ces param�tres dans l'instruction EXECUTE. Référez-vous � EXECUTE(7) pour plus d'informations � ce sujet.

Les instructions préparées sont seulement stockées pour la durée de la session en cours. Lorsque la session se termine, l'instruction préparée est oubliée et, du coup, elle doit �tre recréée avant d'�tre utilisée de nouveau. Ceci signifie aussi qu'une seule instruction préparée ne peut pas �tre utilisée par plusieurs clients de bases de données simultanément ; néanmoins, chaque client peut créer sa propre instruction préparée � utiliser. L'instruction préparée peut �tre supprimés manuellement en utilisant la commande DEALLOCATE(7).

Les instructions préparées sont principalement intéressantes quand une seule session est utilisée pour exécuter un grand nombre d'instructions similaires. La différence de performances est particuli�rement significative si les instructions sont complexes � planifier ou � réécrire, par exemple, si la requ�te implique une jointure de plusieurs tables ou requiert l'application de différentes r�gles. Si l'instruction est relativement simple � planifier ou � réécrire mais assez co�teuse � exécuter, l'avantage de performance des instructions préparées est moins net.

Param�tres

nom

Un nom quelconque donné � cette instruction préparée particuli�re. Il doit �tre unique dans une session et est utilisé par la suite pour exécuter ou désallouer cette instruction préparée.

type_données

Le type de données d'un param�tre de l'instruction préparée. Si le type de données d'un param�tre particulier n'est pas spécifié ou est spécifié comme étant inconnu (unknown), il sera inferré � partir du contexte dans lequel le param�tre est utilisé. Pour référencer les param�tres de l'instruction préparée, utilisez $1, $2, etc.

instruction

Toute instruction SELECT, INSERT, UPDATE, DELETE ou VALUES.

Notes

Si une instruction préparée est exécutée suffisamment de fois, le serveur peut éventuellement décider de sauvegarder et ré-utiliser un plan générique plut�t que de re-planifier le plan � chaque fois. Cela surviendra immédiatement si l'instruction préparée n'a pas de param�tres. Sinon, cela n'arrivera que si le plan générique semble ne pas �tre plus co�teux que le plan dépendant des valeurs des param�tres. Typiquement un plan générique sera sélectionné seulement si les performances de la requ�te sont estimées comme étant insensible aux valeurs fournies pour les param�tres.

Pour examiner le plan de requ�te que PostgreSQL™ utilise pour une instruction préparée, utilisez EXPLAIN(7). Si un plan générique est utilisé, il contiendra des symboles $n, alors qu'un plan personnalisé contiendra les valeurs réellement utilisées.

Pour plus d'informations sur la planification de la requ�te et les statistiques récupérées par PostgreSQL™ dans ce but, voir la documentation de ANALYZE(7).

Vous pouvez voir toutes les instructions préparées disponibles dans la session en exécutant une requ�te sur la vue syst�me pg_prepared_statements.

Exemples

Crée une instruction préparée pour une instruction INSERT, puis l'exécute :

PREPARE fooplan (int, text, bool, numeric) AS
    INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);

Crée une instruction préparée pour une instruction SELECT, puis l'exécute :

PREPARE usrrptplan (int) AS
    SELECT * FROM users u, logs l WHERE u.usrid=$1 AND u.usrid=l.usrid
    AND l.date = $2;
EXECUTE usrrptplan(1, current_date);

Note that the data type of the second parameter is not specified, so it is inferred from the context in which $2 is used.

Compatibilité

Le standard SQL inclut une instruction PREPARE mais il est seulement utilisé en SQL embarqué. Cette version de l'instruction PREPARE utilise aussi une syntaxe quelque peu différente.