Postgres Timestamps

Inleiding

Deze tutorial zal uitleggen hoe u Postgres timestamps maakt en de stempels gebruikt in PostgreSQL tabelrecords in de PSQL command line interface. PostgreSQL is zeer flexibel in het verwerken van datum en tijdstempels en is meestal flexibeler dan standaard SQL procedures vereisen. Het artikel geeft details over het gebruik van PSQL om geldige ISO 8601-compatibele datum-en tijdstempelreeksen te retourneren die kunnen worden gebruikt in PostgreSQL-tabelgegevens.,

Prerequisites

Postgres en de PSQL opdrachtregelinterface moeten zowel geïnstalleerd zijn als correct werken. Voer het psql -V commando uit om het huidige versienummer te verkrijgen. Als alternatief kan het postgres -V Commando worden gebruikt om het PostgreSQL database versienummer op te halen.

gebruik psql om verbinding te maken met een database

een verbinding met de interface met behulp van de standaard postgres admin rol kan worden geprobeerd met alleen het psql Commando., Het zal echter nodig zijn om over te schakelen naar de postgres gebruiker in de terminal (sudo -u postgres -i) en een gebruiker aan te maken als er een foutmelding verschijnt met de vermelding: FATAL: role "postgres" does not exist., Zodra een Postgres gebruiker met rol attributen is ingesteld, wordt een verbinding met een PSQL database kan worden vastgesteld, zoals weergegeven in het volgende voorbeeld:

1
psql -U objectrocket -d some_db

OPMERKING: Zorg ervoor dat objectrocket wordt vervangen door de gebruiker van rol en some_db met de naam van de database wordt gebruikt.,

Postgres Timestamp

Postgres timestamp gegevenstypen kunnen op verschillende manieren worden geformatteerd, waaronder strings, integers of floating-point gegevenstypen.,

een timestamp van de huidige tijd

De eenvoudigste manier om een timestime is om de volgende te gebruiken NOW() commando functie:

1
SELECTEER nu();

Dit moet terug een volledige datum-en tijdstempel van een string die bestaat uit de huidige Postgres tijd zone.,

PostgreSQL-Tijdzone

voordat u tabellen of records met datums en tijdstempels maakt, moet u eerst controleren of de tijdzone correct is ingesteld.,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 rij)

PostgreSQL unix timestamp

een numerieke tijdstempel is het meest efficiënt omdat het niet kan worden beà nvloed door gebruikers of servers in verschillende tijdzones of andere tijdveranderende gebeurtenissen, zoals het overschakelen naar of Van zomertijd in de Verenigde Staten., De volgende SQL-instructie gebruiken de PostgreSQL EXTRACT() functie voor het retourneren van een Unix timestamp:

1
SELECTEER EXTRACT(TIJD VAN NU());

Het bovenstaande commando zal de terugkeer van een double-precision floating point dat staat voor het aantal seconden en milliseconden dat is verstreken sinds 1 januari 1970, in de volksmond beter bekend als de Unix epoch tijd.,

Postgres Epoch to Timestamp

Gebruik de dubbele precisie Unix epoch om een tijdstempel te maken met de handige Postgres functie TO_TIMESTAMP(). Deze functie accepteert een reeks gegevens, zoals geschreven maanden en dagen, als argument en retourneert een correct geformatteerde tijdstempel met de ingestelde tijdzone aan het einde van het resultaat.,

Postgres TO_TIMESTAMP() functie

de Volgende is de basic-syntaxis voor de TO_TIMESTAMP() functie:

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

Het tweede argument is voor het opmaken van de string, zodat Postgres zullen weten hoe deze te interpreteren de datum string die wordt doorgegeven., Als dat formaat argument niet overeenkomt met de datum en tijd string, PSQL zal een invalid value fout.

gebruik het SELECT sleutelwoord om de functie een waarde te laten retourneren.,vleugel opdracht wordt nauwkeurig omzetten van de gehele getallen 84 een van de 4-cijferige jaar 1984:

1
2
SELECTEER
TO_TIMESTAMP(‘5 12 84 12’, ‘MM-DD-JJ HH’);

Met een floating-point-getal dat een exact vastgestelde tijd, gebruikt u de waarden met de Postgres TO_TIMESTAMP() functie voor het opmaken van een dubbele precisie aantal in leesbare tijdstempel.,

epoch converteren naar tijdstempel

het volgende SQL commando zal de to_char() en date() functies gebruiken om een tekenreeks uit een epoch precision float nummer te casten zodat deze kan worden doorgegeven aan de TO_TIMESTAMP() functie. Dit geeft een tijdstempel als volgt terug:

1
2
3
SELECT to_char(
DATE(to_timestamp(1582410142.,222222)
),’YYYYY-MM-DD UU:mm’);

opmerking het bovenstaande commando moet een tijdstempel van 2020-02-22-12-02 geven zonder de tijdzone te bevatten.

PostgreSQL to_timestamp met Tijdzone

Include TZ aan het einde van het tekenreeksargument om de tijdzone in het stempel te laten opnemen.,

het volgende voorbeeld maakt een tijdstempel aan van een epoch precisiepunt, zoals eerder, maar deze keer bevat het de seconden en de Postgres ingestelde tijdzone zoals hier getoond:

1
2
3
selecteer to_char(
date(to_timestamp(1582410142., het systeem moet terug een tijdstempel met -06 staat voor de GMT-6 time zone, zoals weergegeven aan het einde van de volgende reactie:

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

Postgres timestamptz

De timestamptz gegevenstype in PostgreSQL is in wezen een tijdstempel string met een timezone bevestigd., Als de betrokken records gevoeliger zijn voor de tijd, rekening moeten houden met internationale gebruikers of als de gegevens alleen een hogere mate van specificiteit vereisen, is het verstandig om timestamptz voor die records te gebruiken.

PostgreSQL timestamptz vs timestamp

voor meer informatie over de verschillen tussen de twee timestamp types, refereer je hier naar het volledige artikel: (https://kb.objectrocket.com/postgresql/postgresql-timestamp-vs-timestamptz-616)

Postgres tabel met timestamps

maak vervolgens een PostgreSQL tabel met timestamp kolommen met behulp van enkele van de eerder besproken voorbeelden., Plaats nu een testrecord in de tabel om te controleren of de functie correct werkt.

gebruik Postgres om een tabel met tijdstempels te maken

Voer nu een CREATE TABLE SQL-statement uit dat meerdere kolommen voor tijdstempels bevat.,g opdracht met een Unix epoch integer tijdstempel voor de tabel de kolom:

1
2
3
4
5
6
CREATE TABLE tijdstempels(
tijdperk INT,
cool_stuff VARCHAR(64),
date_zone TIMESTAMPTZ,
DATE TIMESTAMP
);

OPMERKING: De bovenstaande tabel schema kan niet worden gebruikt voor het invoegen van meerdere records tegelijkertijd met het maken van dubbele sleutels als u meerdere invoegingen worden uitgevoerd in minder dan een seconde.,

voeg tijdstempelrecords in een Postgres-tabel

de tabel is nu klaar voor het invoegen van de record., Voer de volgende commando ‘ INSERT INTO instructie te injecteren tijdstempels in de record wanneer de record wordt ingevoegd:

het Selecteren van de record moet nu terug een resultaat dat lijkt op het volgende:

Zoals getoond in de volgende afbeelding, een erg episch tijdperk record is aangemaakt:

Conclusie

Deze handleiding een stap-voor-stap handleiding voor het maken van Postgres tijdstempels en legt uit hoe u de postzegels in PostgreSQL tafel van records., Het artikel behandelde specifiek hoe een tijdstempel van de huidige tijd te krijgen, het systeem op de juiste tijdzone in te stellen en gaf een voorbeeld van hoe Postgres te gebruiken om een tabel met tijdstempels te maken. Vergeet niet om de objectrocket en some_db plaatsaanduidingen te vervangen door de werkelijke gebruikersrol en de naam van de werkelijke database die gebruikt wordt bij het verbinden met de database.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *