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.
SELECT EXTRACT(MILLISECONDS FROM Now());
OriginalL'auteur Jeremy Holovacs | 2013-05-30
Vous devez vous connecter pour publier un commentaire.
Remarque:
Pour la version 9.0+ que vous pouvez lire dans la documentation l'exemple suivant:
Avant 9.0 il est:
Sur cette base, il n'est pas clair que mon exemple de travail antérieures à la version 9.0
FYI:
EXTRACT(EPOCH FROM t)
travaille certainement en 8.4.OriginalL'auteur Tomas Greif
Voici un one-liner pour calculer le temps écoulé en millisecondes à partir d'un passé TIMESTAMP():
L'exemple ci-dessus calcule le retard de réplication entre un principal et de veille serveur PostgreSQL, donc il suffit de remplacer
pg_last_xact_replay_timestamp()
avec votre TIMESTAMP.Pour voir ce qu'il fait un peu plus clairement:
De sortie:
OriginalL'auteur liquidki
@TomasGreif réponse, j'ai fait une petite fonction datediff dans le cas où vous avez besoin de faire de la milliseconde datediffs souvent:
Utilisation:
OriginalL'auteur Shaul Behr