Zainstalowałem PostgreSQL 9
i wyświetlany czas jest 1 godzinę za czasem serwera.
Select NOW()
Pokazy biegowe :2011-07-12 11:51:50.453842+00
Data serwera pokazuje: Tue Jul 12 12:51:40 BST 2011
Jest 1 godzina wstecz, ale strefa czasowa pokazana w phppgadmin
to:TimeZone Etc/GMT0
Próbowałem wejść do postgresql.conf
ustawienia i
strefa czasowa = GMT
a następnie ponowne uruchomienie, ale bez zmian.
Jakieś pomysły, o których myślałem, że użyłby tylko strefy czasowej serwera, ale oczywiście nie ?!
ROZWIĄZANIE !: Ustawiłem się GMT
wcześniej i minęła godzina. po przeszukaniu okazuje się, że musiałem to ustawić Europe/London
. Uwzględnia to +1 godzinę brytyjskiego czasu letniego, GMT nie!
źródło
SET TIME ZONE 'UTC';
. Zobacz doc .Wybierz
timezone
spośród:I
set
jak poniżej podany przykład:Użyj swojej nazwy DB zamiast
postgres
w powyższej instrukcji.źródło
SELECT pg_reload_conf();
:)SELECT pg_reload_conf()
prawdę, alenow()
iselect current_setting('TIMEZONE')
nadal zwracam wartości dla „America / New_York”. Czy to dlatego, że nie jestem superużytkownikiem?Aby zakończyć zmianę strefy czasowej w Postgres 9.1, musisz:
1.- Wyszukaj w folderze „timezones” w /usr/share/postgresql/9.1/ odpowiedni plik, w moim przypadku będzie to „America.txt”, w nim wyszukaj lokalizację najbliższą Twojej strefy i skopiuj pierwsze litery w lewej kolumnie.
Na przykład: jeśli jesteś w „Nowym Jorku” lub „Panamie”, będzie to „EST”:
2. - Usuń komentarz z linii „strefa czasowa” w
postgresql.conf
pliku i ustaw strefę czasową, jak pokazano:3. - Uruchom ponownie Postgres
źródło
−05:00
roku, podczas gdy Nowy Jork przesuwa o godzinę z czasem letnim (DST). Strefa czasowa to coś więcej niż przesunięcie; strefa czasowa obejmuje przeszły, obecny i przyszły zestaw reguł i anomalii, takich jak czas letni. Tak więc, powiedzieć, co masz na myśli:America/Panama
,America/New_York
,Europe/London
,UTC
(alboZulu
).SELECT * FROM pg_timezone_names
to, co prawdopodobnie jest bezpieczniejsze, biorąc pod uwagę, że witryny innych firm niekoniecznie będą tak aktualne (lub nieaktualne) jako Twoja własna instancja bazy danych.postgresql
select pg_reload_conf()
.Akceptowane odpowiedź przez Muhammada Osamą jest poprawna.
Nazwa parametru konfiguracji
Ta odpowiedź pokazuje, jak ustawić parametr konfiguracyjny specyficzny dla Postgres z następującymi elementami:
… Gdzie
timezone
nie jest poleceniem SQL, jest to nazwa parametru konfiguracyjnego.Zobacz dokument na ten temat .
Standardowe polecenie SQL
Alternatywnie, można użyć polecenia SQL zdefiniowanego przez spec SQL:
SET TIME ZONE
. W tej składni para słówTIME ZONE
zastępuje „strefa czasowa” (rzeczywista komenda SQL kontra nazwa parametru) i nie ma słowa „TO”.Zarówno to polecenie, jak i powyższe mają ten sam efekt, ustawiając wartość tylko dla bieżącej sesji. Aby zmiana była trwała, zobacz odpowiedź dla rodzeństwa .
Zobacz dokument na ten temat .
Nazwa strefy czasowej
Możesz podać odpowiednią nazwę strefy czasowej . Większość z nich to kontynent / region.
…lub…
Unikaj 3 lub 4-literowych skrótów, takich jak
EST
lub,IST
ponieważ nie są one ani znormalizowane, ani unikalne. Zobacz Wikipedię, aby zobaczyć listę nazw stref czasowych .Pobierz aktualną strefę
Aby zobaczyć bieżącą strefę czasową dla sesji, wypróbuj jedną z poniższych instrukcji. Z technicznego punktu widzenia wywołujemy
SHOW
polecenie, aby wyświetlić parametr czasu wykonywania.…lub…
źródło
SHOW
rolęSELECT current_setting('TIMEZONE')
Oprócz poprzednich odpowiedzi, jeśli używasz narzędzia pgAdmin III , możesz ustawić strefę czasową w następujący sposób:
źródło
Należy zauważyć, że wielu klientów innych firm ma własne ustawienia strefy czasowej, które nakładają się na dowolny serwer Postgres i \ lub ustawienia sesji.
Np. Jeśli używasz „IntelliJ IDEA 2017.3” (lub DataGrips), powinieneś zdefiniować strefę czasową jako:
„Właściwości źródła bazy danych” -> karta „Zaawansowane” -> „Opcje maszyny wirtualnej”: -Duser.timezone = UTC + 06: 00
w przeciwnym razie zobaczysz „UTC” niezależnie od tego, co ustawiłeś gdziekolwiek indziej.
źródło
Może nie ma to związku z pytaniem, ale musiałem użyć CST, ustawić strefę czasową systemu na żądane tz (America / ...) a następnie w postgresql conf ustawić wartość strefy czasowej na 'localtime' i zadziałało jak urok , current_time drukuje właściwy czas (Postgresql 9.5 na Ubuntu 16)
źródło