Eu costumava ter um problema muito semelhante anos atrás e depois descobri que posso fazer
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Tente isso. (Isso funciona por banco de dados, para uma solução para todos os seus bancos de dados, defina esse parâmetro em você postgresql.conf
- graças a @a_horse_with_no_name.)
Esteja ciente de que a configuração padrão não é independente da localidade . No entanto, depois de initdb
configurá-lo para o que quiser, você pode alterá-lo você mesmo no postgresql.conf
.
O comentário do @ swasheck me fez notar que, com minhas configurações:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
configuração datestyle
tem o seguinte efeito:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Agora, isso não é realmente esperado - e é o mesmo em outro servidor en_US.UTF8
também. Tentar "ISO, DMY"
também me sugere que a "ISO"
parte substitui mais ou menos a outra parte ao produzir uma saída . Para valores de entrada , ele tem o efeito esperado, conforme resumido na tabela abaixo:
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
- significa acima que o estilo de entrada especificado resulta em um erro para a datestyle
configuração especificada .
Após uma leitura cuidadosa da documentação, percebe- datestyle
se um par de configurações parcialmente conflitantes:
Por razões históricas, essa variável contém dois componentes independentes: a especificação do formato de saída (ISO, Postgres, SQL ou alemão) e a especificação de entrada / saída para pedidos de ano / mês / dia (DMY, MDY ou YMD).
Para mim, isso significa que é preciso encontrar aquele que atenda às suas necessidades um pouco de experimentação - mas a melhor maneira é deixá-lo no padrão e sempre usar um formato de entrada inequívoco. Dois deles são 'YYYY-MM-DD'
e 'YYYYMMDD'
. Eu prefiro o primeiro - mesmo usando este IRL;)
Nota: a datestyle
configuração (e outras configurações de tempo de execução) de postgresql.conf
pode ser substituída por um ALTER DATABASE bla SET datestyle ...
, definindo-o permanentemente para um único banco de dados ou SET datestyle TO ...
definindo-o para a sessão atual. Este último pode ser útil ao importar alguns dados de terceiros com um formato de data diferente.