PREPARE

Nom

PREPARE -- prépare une instruction pour exécution

Synopsis

PREPARE nom_plan [ (type_donnees [, ...] ) ] 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écifique est analysée, réécrite et planifiée. Quand une commande EXECUTE est lancée par la suite, l'instruction préparée a seulement besoin d'être exécutée. Du coup, les étapes d'analyse, de réécriture et de planification sont réalisées une seule fois, à la place de chaque fois que l'instruction est exécutée.

Les instructions préparées peuvent prendre des paramètres : les valeurs qui sont substituées dans l'instruction lorsqu'elle est exécutée. Pour inclure les paramètres dans une instruction préparée, fournissez une liste des types de données dans l'instruction PREPARE, et, dans l'instruction à préparer elle-même, référez-vous aux paramètres par position en utilisant $1, $2, etc. Lors de l'exécution de l'instruction, spécifiez les valeurs réelles pour ces paramètres dans l'instruction EXECUTE. Référez-vous à EXECUTE pour plus d'informations sur cela.

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.

Les instructions préparées ont leur principal avantage quand une seule session est en cours d'utilisation pour exécuter un grand nombre d'instructions similaires. La différence de la performance sera 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 dépensière à exécuter, l'avantage de performance des instructions préparées sera moins remarquable.

Paramètres

nom_plan

Un nom arbitraire 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_donnees

Le type de données d'un paramètre de l'instruction préparée. Pour référencer les paramètres dans l'instruction préparée elle-même, utilisez $1, $2, etc.

instruction

Toute instruction SELECT, INSERT, UPDATE ou DELETE.

Notes

Dans certaines situations, le plan de requête produit par une instruction préparée pourrait être inférieur au plan produit si l'instruction avait été soumise et exécutée normalement. C'est parce que, quand l'instruction est planifiée et que le planificateur tente de déterminer le plan de requête optimal, les valeurs réelles de tous les paramètres spécifiés dans l'instruction ne sont pas disponibles. PostgreSQL récupère les statistiques de la distribution des données dans la table et peut utiliser les valeurs constantes dans une instruction pour deviner le résultat probable de l'exécution de l'instruction. Comme cette donnée n'est pas disponible lors de la planification d'instructions préparées avec paramètres, le plan choisi pourrait ne pas être optimal. Pour examiner le plan de requête que PostgreSQL a choisi pour une instruction préparée, utilisez EXPLAIN EXECUTE.

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.

Compatibilité

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