Quiero obtener el nombre de la zona horaria actual. Lo que ya logré es obtener la utc_offset
/ la abreviatura de la zona horaria a través de:
SELECT * FROM pg_timezone_names WHERE abbrev = current_setting('TIMEZONE')
Esto me da todas las combinaciones Continente / Capital para esta zona horaria, pero no la exacta timezone
. Por ejemplo, obtengo:
Europe/Amsterdam
Europe/Berlin
El servidor está adentro Berlin
y quiero obtener el nombre de la zona horaria del servidor.
El problema que tengo con CET
eso es siempre UTC+01:00
y no se tiene en cuenta DST iirc
.
postgresql
datetime
timezone
Deutro
fuente
fuente
Respuestas:
No creo que esto sea posible usando PostgreSQL solo en el caso más general. Cuando instala PostgreSQL, elige una zona horaria. Estoy bastante seguro de que el valor predeterminado es usar la zona horaria del sistema operativo. Eso generalmente se reflejará en postgresql.conf como el valor del parámetro "timezone". Pero el valor termina como "localtime". Puede ver esta configuración con la declaración SQL.
show timezone;
Pero si cambia la zona horaria en postgresql.conf a algo como "Europa / Berlín",
show timezone;
devolverá ese valor en lugar de "localtime".Así que creo que su solución implicará establecer "timezone" en postgresql.conf en un valor explícito en lugar del "localtime" predeterminado.
fuente
set timezone to 'UTC'
.set timezone
establece la zona horaria para una sesión de cliente; no establece la zona horaria del servidor PostgreSQL.Esto puede ayudarlo o no a abordar su problema, OP, pero para obtener la zona horaria del servidor actual en relación con UTC ( UT1 , técnicamente), haga:
SELECT EXTRACT(TIMEZONE FROM now())/3600.0;
Lo anterior funciona extrayendo el desplazamiento relativo de UT1 en minutos y luego convirtiéndolo en horas usando el factor de 3600 segundos / hora.
Ejemplo:
SET SESSION timezone TO 'Asia/Kabul'; SELECT EXTRACT(TIMEZONE FROM now())/3600.0; -- output: 4.5 (as of the writing of this post)
( documentos ).
fuente
SELECT EXTRACT(TIMEZONE_HOUR FROM now())
, pero esto es un poco peligroso porque ignora el hecho de que existen zonas horarias medias y cuartos . @giladMayaniParece funcionar bien en Postgresql 9.5 :
SELECT current_setting('TIMEZONE');
fuente
Ver esta respuesta: Fuente
Esto significa que si no define una zona horaria, el servidor intenta determinar la zona horaria predeterminada del sistema operativo comprobando el comportamiento de la función de la biblioteca C localtime ().
Si la zona horaria no se especifica en postgresql.conf o como una opción de línea de comandos del servidor, el servidor intenta utilizar el valor de la variable de entorno TZ como zona horaria predeterminada.
Parece que es posible configurar la zona horaria del sistema.
Obtenga la zona horaria local del sistema operativo desde el shell. En psql:
fuente
date +%Z
El comando devolverá la zona horaria del cliente, no el servidor al que se ha conectadopsql
Puede acceder a la zona horaria mediante el siguiente script:
SELECT * FROM pg_timezone_names WHERE name = current_setting('TIMEZONE');
la salida será:
fuente