Como posso definir meu banco de dados para ver a 'data' como "MDY" sem executar:
SET datestyle = "ISO, MDY";
toda vez que estou tentando acessá-lo? Estou usando o Postgresql versão 9.1, Ubuntu 12.04. A localidade do meu sistema, no momento da instalação do banco de dados, foi definida como en_CA.utf8
e recentemente mudei para en_US.utf8
.
show lc_CTYPE
retorna: -->"en_CA.UTF-8"
mas
show LC_CoLLATE
retorna: -->"en_CA.UTF-8"
Eu costumava ter um problema muito semelhante anos atrás, e então descobri que posso fazer
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.)Por favor, esteja ciente de que a configuração padrão não é independente de localidade . No entanto, depois de
initdb
configurá-lo para o que quiser, você pode alterá-lo no arquivopostgresql.conf
.O comentário de @swasheck me fez notar que, com minhas configurações:
configuração
datestyle
tem o seguinte efeito:Agora, isso não é realmente esperado - e é o mesmo em outro servidor com
en_US.UTF8
, também. Tentar"ISO, DMY"
também me sugere que a"ISO"
parte está mais ou menos substituindo a outra parte ao produzir uma saída . Para valores de entrada , tem o efeito esperado, conforme resumido na tabela abaixo:-- significa acima que o estilo de entrada fornecido resulta em um erro para a
datestyle
configuração fornecida.Após a leitura cuidadosa da documentação, pode-se ver que
datestyle
é um par de configurações parcialmente conflitantes:Para mim, isso significa que é preciso encontrar aquele que atenda às suas necessidades experimentando um pouco - 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 ;)Observação: a
datestyle
configuração (e outras configurações de tempo de execução) depostgresql.conf
pode ser substituída por umALTER DATABASE bla SET datestyle ...
, definindo-a permanentemente para um único banco de dados ouSET datestyle TO ...
definindo-a para a sessão atual. Este último pode ser útil ao importar alguns dados de terceiros com um formato de data diferente.Obrigado @a_horse_with_no_name| @dezso | @ypercubeᵀᴹ
Eu quero escrever uma resposta simples de implementar: Etapas
show datestyle;
mostrar o estilo de data atual "ISO, DMY " ou "ISO, MDY"Agora, dependendo do que você deseja no postgres DMY ou MDY definido na consulta abaixo
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";
ou
ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";
Etapa mais importante: Sempre após definir o estilo de data, reinicie o postgres
sudo service postgresql restart
Ou
sudo /etc/init.d/postgresql restart
Permite testar a configuração
se você definiu DMY abaixo da consulta deve funcionar para você
Consulta:
select '20/12/2016'::date
Saída:"2016-12-20"
Ou
se você definiu o MDY abaixo da consulta deve funcionar para você
Consulta:
select '12/19/2016'::date
Saída:"2016-12-19"
Em /etc/postgresql/9.3/main/postgresql.conf set
datestyle = 'iso, dmy'
OUdatestyle = 'iso, mdy'
Etapa mais importante: Sempre após definir o estilo de data, reinicie o postgres
sudo service postgresql restart
Ou
sudo /etc/init.d/postgresql restart
Permite testar a configuração
se você definiu DMY abaixo da consulta deve funcionar para você
Consulta:
select '20/12/2016'::date
Saída:"2016-12-20"
Ou
se você definiu o MDY abaixo da consulta deve funcionar para você
Consulta:
select '12/19/2016'::date
Saída:"2016-12-19"
Expandindo a resposta do @deszo (não tenho reputação suficiente para comentar lá),
ISO
o parâmetro substitui a especificação dia-mês-ano na saída. Se você deseja ter entrada e saída no mesmo formato , você precisa usarSET DATESTYLE TO 'SQL, MDY'
, ouSET DATESTYLE TO 'MDY, SQL'
(a ordem dos parâmetros é inferida pelo Postgres).