sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan påvirker uforanderlige, stabile og flygtige søgeord funktionsadfærd?

Nøgleordet IMMUTABLE er aldrig tilføjet automatisk af pgAdmin eller Postgres. Den, der har oprettet eller erstattet funktionen, gjorde det.

Den korrekte volatilitet for den givne funktion er VOLATILE (også standard), ikke STABLE - ellers ville det ikke give mening at bruge clock_timestamp() som er VOLATILE i modsætning til now() eller CURRENT_TIMESTAMP som er STABLE :de returnerer det samme tidsstempel inden for samme transaktion. Manualen:

clock_timestamp() returnerer den aktuelle aktuelle tid, og derfor ændres dens værdi selv inden for en enkelt SQL-kommando.

Manualen advarer om, at funktionsvolatilitet STABLE ...

er upassende for AFTER triggere, der ønsker at forespørge på rækker, der er ændret af den aktuelle kommando.

.. fordi gentagen evaluering af triggerfunktionen kan returnere anderledes resultater for samme række. Altså ikke STABLE .

Du spørger:

Har du en idé om, hvorfor funktionen returnerede korrekt fem gange, før den blev fastholdt på den femte værdi, når den blev sat som IMMUTABLE ?

Postgres Wiki:

Med 9.2 vil planlæggeren bruge specifikke planer vedrørende de sendte parametre (forespørgslen vil blive planlagt ved udførelse), undtagen hvis forespørgslen udføres flere gange og planlæggeren beslutter, at den generiske plan ikke er for meget dyrere end de specifikke planer.

Fed understregning min. Det lader ikke til at give mening for en IMMUTABLE funktion uden inputparametre. Men den falske etiket tilsidesættes af VOLATILE funktion i kroppen (tomrum funktion inlining ):en anden forespørgselsplan kan stadig give mening.Relateret:

  • PostgreSQL Stored Procedure Performance

Til side

trunc() er lidt hurtigere end floor() og gør det samme her, da positive tal er garanteret:

SELECT (trunc(EXTRACT(EPOCH FROM clock_timestamp()) * 10) - 13885344000)::int



  1. Kan databaseposter tilføjet fra elementer slettes med knappen?

  2. SQLite MIN

  3. Optælling af referencer til en post i en tabel via fremmednøgler

  4. Installer webserver i Windows XP med Apache2, PHP5 og MySQL4 – del 1