Obtenez de l'intervalle en millisecondes

J'ai une procédure qui contient le code comme ceci:

processStart := current_timestamp;
-- run statement(s)
processEnd := current_timestamp;
elapsed := processEnd - processStart;
raise notice 'My Statement, elapsed time: %', elapsed;

L'idée est, je veux obtenir la quantité de temps nécessaire pour qu'une déclaration ou d'une collection d'instructions à exécuter.

Le problème est, il renvoie 00:00:00 pour subsecond des temps écoulés. J'ai vraiment envie de voir les millisecondes. Comment puis-je faire cela?

Il y a des questions et des réponses sur l'utilisation de EXTRACT et EPOCH, mais ce qui semble être à la "deuxième niveau", et qui n'est pas granulaire suffisant pour mes besoins.

Mise à JOUR

À l'aide de @twn08 réponse, j'ai finalement arrivés à la solution suivante:

J'ai déclaré les variables suivantes:

declare
    processStart timestamp;
    elapsed numeric(18,3);
    processFinish timestamp;

alors, avant de commencer le processus:

processStart := clock_timestamp();

après le processus est terminé, j'ai couru ce:

processFinish := clock_timestamp();
elapsed := cast(extract(epoch from (processFinish - processStart)) as numeric(18,3));
raise notice 'My Statement, elapsed time: % ms', elapsed;

cela a fonctionné à merveille.

Vous pouvez extraire millisecondes: SELECT EXTRACT(MILLISECONDS FROM Now());

OriginalL'auteur Jeremy Holovacs | 2013-05-30