Size: a a a

pgsql – PostgreSQL

2021 March 06

M

Maxim in pgsql – PostgreSQL
Yaroslav Schekin
> но приходиться РУКАМИ в клиенте ставить PGTZ или TimeZone в конфиге.

А как Вы хотели? Клиент-то выполняется вообще не на сервере PostgreSQL, и не имеет к нему непосредственного отношения.
Более того, он сам должен знать, какая time zone ему нужна (если это "мой" клиент, к примеру, мне нужна Europe/Moscow; а кому-то ещё, может, Europe/Kiev и так далее).

> А так бы библиотека клиенты сама ставила зону и вуаля …

Магия? ;)
Повторюсь еще раз наверно пропустили, функционал был такой:
If timezone is not specified in postgresql.conf or as a server command-line option, the server attempts to use the value of the TZ environment variable as the default time zone. If TZ is not defined or is not any of the time zone names known to PostgreSQL, the server attempts to determine the operating system's default time zone by checking the behavior of the C library function localtime(). The default time zone is selected as the closest match among PostgreSQL's known time zones. (These rules are also used to choose the default value of log_timezonelog_timezone, if not specified.)
источник

M

Maxim in pgsql – PostgreSQL
The server attempts to determine the operating system's default time zone by checking the behavior of the C library function localtime()
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Maxim
Да можно для сессии определить TZ, но тоже лишние движения на мой взгляд
А альтернатива-то какая? В смысле, если клиент использует libpq, и если он явно не передаёт time zone при соединении, то с помощью environment variables (на клиенте!) Вы это измените, а если какое-то из этих условий не выполняется?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Maxim
Повторюсь еще раз наверно пропустили, функционал был такой:
If timezone is not specified in postgresql.conf or as a server command-line option, the server attempts to use the value of the TZ environment variable as the default time zone. If TZ is not defined or is not any of the time zone names known to PostgreSQL, the server attempts to determine the operating system's default time zone by checking the behavior of the C library function localtime(). The default time zone is selected as the closest match among PostgreSQL's known time zones. (These rules are also used to choose the default value of log_timezonelog_timezone, if not specified.)
Повторюсь ещё раз, наверно пропустили: его там никогда не было и не могло быть. Вы просто не поняли, что означал этот код.
источник

M

Maxim in pgsql – PostgreSQL
Yaroslav Schekin
Повторюсь ещё раз, наверно пропустили: его там никогда не было и не могло быть. Вы просто не поняли, что означал этот код.
Возможно не понял, поясните тогда о чем а 9.1 идет речь про определение тайм зоны через С функцию localtime() ?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Maxim
Возможно не понял, поясните тогда о чем а 9.1 идет речь про определение тайм зоны через С функцию localtime() ?
Речь идёт о том, что при старте сервера PostgreSQL, если "timezone is not specified in postgresql.conf or as a server command-line option", то как значение default time zone для подключающихся сессий (если оно не "перебивается" другими методами, их несколько) будет использоваться значение TZ на сервере, а в крайнем случае, если и оно не установлено / неправильное, то результат вызова localtime() на сервере, и всё.
источник

M

Maxim in pgsql – PostgreSQL
Yaroslav Schekin
Речь идёт о том, что при старте сервера PostgreSQL, если "timezone is not specified in postgresql.conf or as a server command-line option", то как значение default time zone для подключающихся сессий (если оно не "перебивается" другими методами, их несколько) будет использоваться значение TZ на сервере, а в крайнем случае, если и оно не установлено / неправильное, то результат вызова localtime() на сервере, и всё.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ну да, я это знаю.
Так Вы получили ответ на свой вопрос (я что-то не уверен)? ;)
источник

M

Maxim in pgsql – PostgreSQL
Yaroslav Schekin
Ну да, я это знаю.
Так Вы получили ответ на свой вопрос (я что-то не уверен)? ;)
А Вы как думаете ? :))
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Maxim
А Вы как думаете ? :))
Не знаю. Вы могли понять, как это работает, и сделать какой-то вывод... или нет. ;)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Maxim
Да все верно, подход такой, но приходиться РУКАМИ в клиенте ставить PGTZ или TimeZone в конфиге.
По умолчанию TimeZone UTC

А так бы библиотека клиенты сама ставила зону и вуаля …
псс… можно прописать USER-у и/или DATABASE-у соответствующую настройку…
источник

LE

Lex E in pgsql – PostgreSQL
Maxim
А Вы как думаете ? :))
а почему вы не можете передать переменную client_env_timezone ?
SET TIME ZONE 'client_env_timezone';

The SQL command SET TIME ZONE sets the time zone for the session. This is an alternative spelling of SET TIMEZONE TO with a more SQL-spec-compatible syntax.
https://www.postgresql.org/docs/current/datatype-datetime.html

я бы написал вот так и посмотрел что будет
SET TIME ZONE LOCAL;
https://www.postgresql.org/docs/13/sql-set.html

ну если вы блин такой фанат С
https://www.postgresql.org/docs/current/datatype-datetime.html

The PGTZ environment variable is used by libpq clients to send a SET TIME ZONE command to the server upon connection.
https://www.postgresql.org/docs/13/libpq-envars.html
источник

LE

Lex E in pgsql – PostgreSQL
Yaroslav пральна же?
источник

LE

Lex E in pgsql – PostgreSQL
Maxim
Подскажите как настрокить чтобы клиент postgres определял timezone по умолчания из среды запуска как в mysql ?
.
источник

k🥔

karrtopelka 🥔 in pgsql – PostgreSQL
Привет, подскажите пожалуйста,
у меня есть ученики, и есть стипендии
мне надо вывести всех учеников, но по конкретному месяцу, и даже если ученик не получал стипендию, все равно его вывести.

Т.е. сейчас если я ставлю
where
и выбираю месяц, то выводятся только те, кто получал, а как вывести всех? Заранее Спасибо)
источник

XN

Xeon Null in pgsql – PostgreSQL
karrtopelka 🥔
Привет, подскажите пожалуйста,
у меня есть ученики, и есть стипендии
мне надо вывести всех учеников, но по конкретному месяцу, и даже если ученик не получал стипендию, все равно его вывести.

Т.е. сейчас если я ставлю
where
и выбираю месяц, то выводятся только те, кто получал, а как вывести всех? Заранее Спасибо)
левый джоин на учеников
источник

AN

Alexander Nikitin in pgsql – PostgreSQL
left join
источник

k🥔

karrtopelka 🥔 in pgsql – PostgreSQL
Xeon Null
левый джоин на учеников
второй раз?
источник

XN

Xeon Null in pgsql – PostgreSQL
karrtopelka 🥔
второй раз?
первый перемножением учеников на generate_series
источник

XN

Xeon Null in pgsql – PostgreSQL
и левый джоин на получившееся выплат
источник