Postgres tidsstempler

introduktion

denne vejledning forklarer, hvordan du opretter Postgres tidsstempler og bruger frimærkerne i Postgres .l-tabeloptegnelser i PS .l-kommandolinjegrænsefladen. Postgres .l er meget fleksibel i håndtering dato og tidsstempler og er typisk mere fleksibel end standard S .l procedurer kræver. Artiklen vil give detaljer om, hvordan du bruger PS .l til at returnere gyldige ISO 8601-kompatible dato-og tidsstempelstrenge, der kan bruges i Postgres .l-tabeldata.,

forudsætninger

Postgres og PS .l-kommandolinjegrænsefladen skal både installeres og fungere korrekt. Udfør kommandoen psql -V for at få det aktuelle versionsnummer. Alternativt kan kommandoen postgres -V bruges til at hente Postgres .l-databaseversionsnummeret.

Brug psql til at oprette forbindelse til en database

En forbindelse til det interface, du bruger standard postgres admin rolle kan forsøges med blot psql kommandoen., Det vil dog være nødvendigt at skifte til den postgres bruger i terminalen (sudo -u postgres -i) og oprette en bruger, hvis en fejlmeddelelse, som angiver: FATAL: role "postgres" does not exist, vises., Når en Postgres bruger med rollen attributter er oprettet en forbindelse til en PSQL database kan oprettes som vist i følgende eksempel:

1
psql -U objectrocket -d some_db

BEMÆRK: sørg for, at objectrocket erstattes med brugerens rolle og some_db med navnet på den aktuelle database, der anvendes.,

Postgres tidsstempel

Postgres tidsstempel datatyper kan formateres på forskellige måder, herunder strenge, heltal eller floating-point datatyper.,

Få et timestamp for den nuværende tid

Den nemmeste måde at få en timestime er at bruge følgende NOW() kommando funktion:

1
VÆLG nu();

Dette burde returnere en fuld dato og tidsstempel streng, der indeholder den aktuelle Postgres tidszone.,

Postgres .l tids .one

før du opretter tabeller eller poster med datoer og tidsstempler, skal du først sikre dig, at tids .onen er indstillet korrekt.,ocal timestamp at a specific location:

1
SELECT LOCALTIMESTAMP AT TIME ZONE ‘Asia/Manila’;

The command will return a value that resembles the below results with the UTC time zone included:

1
2
3
4
timezone
——————————-
2019-12-12 20:31:06.,997076-05
(1 RÆKKE)

PostgreSQL Unix timestamp

En numerisk tidsstempel, der er mest effektive, da det ikke kan være påvirket af brugere eller servere placeret i forskellige tidszoner eller andet tidspunkt-at ændre begivenheder, som der skiftes til eller fra sommertid i Usa., Følgende SQL-sætning vil bruge PostgreSQL EXTRACT() funktion til at returnere en Unix tidsstempel:

1
VÆLG EXTRACT(EPOCH FRA NOW());

ovenstående kommando vil returnere en double-precision floating point, der repræsenterer den nøjagtige antal af sekunder og millisekunder, der er gået siden 1 januar 1970, i daglig tale kendt som Unix epoch tid.,

Postgres Epoch to Timestamp

brug uni.-epoken med dobbelt præcision til at oprette en tidsstempel med den praktiske Postgres-funktion TO_TIMESTAMP(). Denne funktion accepterer en streng data, såsom skriftlige måneder og dage, som et argument og returnerer en korrekt formateret tidsstempel med den indstillede tids .one placeret i slutningen af resultatet.,

Postgres TO_TIMESTAMP() funktion

Følgende er den grundlæggende syntaks for TO_TIMESTAMP() funktion:

1
TO_TIMESTAMP( { TIMESTAMP }, { STR_FORMAT } );

Det andet argument er til formatering af snoren, så Postgres vil vide, hvordan man skal fortolke den streng, der bliver gået til den., Hvis dette formatargument ikke stemmer overens med dato-og klokkeslætstrengen, returnerer PS .l en invalid value fejl.

brug SELECT nøgleord for at få funktionen til at returnere en værdi.,wing kommando præcist konvertere heltal 84 4-cifret år 1984:

1
2
VÆLG
TO_TIMESTAMP(‘5 12 84 12’, ‘MM-DD-ÅÅ TT’);

Med en flydende komma-tal, der repræsenterer en præcis nedsat tid, skal du bruge de værdier, der er med Postgres TO_TIMESTAMP() funktion til at formatere en dobbelt præcision nummer i en menneske-læsbar tidsstempel.,

Konverter epoke til timestamp

følgende SQL-kommando vil bruge to_char() og date() funktioner til at kaste en string fra en epoke (“epoch” float præcision nummer, så det kan blive videregivet til de TO_TIMESTAMP() funktion. Dette vil returnere et timestamp som følger:

1
2
3
VÆLG to_char(
DATO(TO_TIMESTAMP(1582410142.,222222)
), ‘YYYY-MM-DD HH:mm”);

Bemærk ovenstående kommando skal returnere et tidsstempel af 2020-02-22-12-02 uden at indeholde den tidszone.

PostgreSQL to_timestamp med tidszone

Include TZ ved slutningen af strengen argument for at have den tidszone, der er indeholdt i stemplet.,

følgende eksempel opretter et tidsstempel fra en epoke præcision punkt, som før, men denne gang er det omfatter sekunder og Postgres indstille tidszone, som vist her:

1
2
3
VÆLG to_char(
DATO(TO_TIMESTAMP(1582410142., systemet skal returnere et tidsstempel med -06, der står for den GMT-6 tidszone, som vist i slutningen af den følgende svar:

1
2
3
4
to_char
————————
2020-02-22 12:02:00-06
(1 RÆKKE)

Postgres timestamptz

timestamptz data type i PostgreSQL er hovedsageligt et tidsstempel, der snor med en tidszone, der er knyttet til det., Hvis de pågældende poster er mere tidsfølsomme, nødt til at tage internationale brugere i betragtning, eller hvis dataene bare kræver en højere grad af specificitet, er det klogt at bruge timestampt.til disse poster.

PostgreSQL timestamptz vs tidsstempel

For mere information om forskellene mellem de to tidsstempel typer, henviser til den fulde artikel her: (https://kb.objectrocket.com/postgresql/postgresql-timestamp-vs-timestamptz-616)

Postgres tabel med timestamps

Næste, kan du oprette en PostgreSQL tabel med tidsstempel kolonner ved hjælp af nogle af de tidligere omtalte eksempler., Indsæt nu en testpost i tabellen for at kontrollere, at funktionen fungerer korrekt.

brug Postgres til at oprette en tabel med tidsstempler

udfør nu en CREATE TABLE s .l-sætning, der indeholder flere kolonner til tidsstempler.,g kommando ved hjælp af en Unix epoch heltal tidsstempel for tabel vigtigste kolonne:

1
2
3
4
5.
6
CREATE TABLE tidsstempler(
epoke V,
cool_stuff VARCHAR(64),
date_zone TIMESTAMPTZ,
DATO TIDSSTEMPEL
);

BEMÆRK: Ovenstående tabel skemaet kan ikke bruges til at indsætte flere poster på samme tid, som det vil oprette kopier af nøgler hvis flere indrykninger udføres i mindre end et sekund.,

Indsæt tidsstempel poster i en Postgres tabel

tabellen er nu klar til posten indsættelse., Udfør følgende INSERT INTO erklæring om, at injicere tidsstempler i rekord, når registrering er indsat:

Valg af registreringen skal nu returnere et resultat, der ligner følgende:

, Som vist i følgende skærmbillede, en meget episk epoch “record” er blevet oprettet:

Konklusion

Denne tutorial gav en trin-for-trin guide til oprettelse af Postgres tidsstempler og forklaret, hvordan du indsætter frimærker i PostgreSQL tabel poster., Artiklen dækkede specifikt, hvordan man får en tidsstempel for den aktuelle tid, indstiller systemet til den korrekte tids .one og gav et eksempel på, hvordan man bruger Postgres til at oprette en tabel med tidsstempler. Husk at erstatteobjectrocket ogsome_db pladsholdere med den faktiske brugerrolle og navnet på den faktiske database, der bruges, når du opretter forbindelse til databasen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *