날짜를 "MDY"로 영구적으로 표시하도록 PostgreSQL 데이터베이스를 설정하는 방법


22

실행하지 않고 '날짜'를 "MDY"로 표시하도록 데이터베이스를 설정하는 방법 :

SET datestyle = "ISO, MDY";

매번 액세스하려고합니까? Postgresql 버전 9.1, Ubuntu 12.04를 사용하고 있습니다. 데이터베이스 설치 당시 시스템 로케일이로 설정되었고 en_CA.utf8최근에로 변경했습니다 en_US.utf8.

show lc_CTYPE

리턴 :-> "en_CA.UTF-8"

그러나

show LC_CoLLATE

리턴 :-> "en_CA.UTF-8"

답변:


32

몇 년 전에 비슷한 문제가 있었는데, 할 수 있다는 것을 알게되었습니다

ALTER DATABASE database_name SET datestyle TO "ISO, MDY";

해봐 ( postgresql.conf@a_horse_with_no_name 덕분 에 모든 데이터베이스의 솔루션에 대해 데이터베이스별로 작동합니다 .)

기본 설정은 로케일과 무관 합니다. 그러나 initdb원하는대로 설정 한 후에 는에서 직접 변경할 수 있습니다 postgresql.conf.

@ swasheck의 의견에 따르면 내 설정에 따라 다음과 같이 기록되었습니다.

test=# SHOW lc_ctype;
      lc_ctype
--------------------
 Hungarian, Hungary
(1 row)


test=# SHOW lc_time;
      lc_time
--------------------
 Hungarian, Hungary
(1 row)

설정 datestyle은 다음과 같은 효과가 있습니다.

SET datestyle TO "ISO, MDY";

SELECT current_date;
    date
------------
 2012-06-21
(1 row)

이제 이것은 실제로 예상되지 않으며 다른 서버에서도 동일합니다 en_US.UTF8. 노력하는 것은 "ISO, DMY", 너무 저를 제안 "ISO"부분은 생성 할 때 다소 다른 부분을 무시입니다 출력 . 들면 입력 아래 표에 요약 값으로, 이는, 예상되는 효과가있다 :

                          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

-주어진 입력 스타일로 인해 주어진 datestyle설정에 오류가 발생 함을 의미 합니다.

설명서를주의 깊게 읽으면 datestyle부분적으로 상충되는 설정 임을 알 수 있습니다 .

역사적 이유로이 변수에는 출력 형식 사양 (ISO, Postgres, SQL 또는 독일어)과 연 / 월 / 일 순서 (DMY, MDY 또는 YMD)의 입력 / 출력 사양이라는 두 가지 독립 구성 요소가 포함됩니다.

나에게 그것은 약간의 실험을 통해 자신의 요구에 맞는 것을 찾아야한다는 것을 의미하지만 가장 좋은 방법은 기본값을 그대로두고 항상 명확한 입력 형식을 사용하는 것입니다. 이 두 가지가 있습니다 'YYYY-MM-DD''YYYYMMDD'. 나는이 IRL을 사용하더라도 전자를 선호합니다.)

참고 :의 datestyle설정 (및 기타 런타임 설정)은 postgresql.conf에 의해 재정의 ALTER DATABASE bla SET datestyle ...되거나 단일 데이터베이스에 대해 영구적으로 SET datestyle TO ...설정 되거나 현재 세션에 대해 설정되어 재정의 될 수 있습니다 . 후자는 다른 날짜 형식의 일부 타사 데이터를 가져올 때 유용 할 수 있습니다.


3

감사합니다 @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

구현하기 쉬운 답변을 작성하고 싶습니다 .

방법 1 : 데이터베이스 당 날짜 스타일 설정

  1. show datestyle;현재 날짜 스타일 "ISO, DMY "또는 "ISO, MDY"표시

  2. 이제 아래 쿼리에서 설정된 postgres DMY 또는 MDY 에서 원하는 것에 따라

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";

    또는

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";

  3. 가장 중요한 단계 : 항상 datestyle 재시작 후 postgres를 설정 한 후

    sudo service postgresql restart

    또는

    sudo /etc/init.d/postgresql restart

  4. 구성 테스트 가능

    DMY를 아래 쿼리로 설정하면 쿼리가 작동합니다.

    쿼리 : select '20/12/2016'::date 출력 : "2016-12-20"

    또는

    아래에서 MDY를 설정하면 쿼리가 작동합니다.

    쿼리 : select '12/19/2016'::date 출력 : "2016-12-19"

방법 2 : 영구적으로 : 구성 파일에 설정 한 내용은 나중에 생성 할 모든 데이터베이스에 설정됩니다.

  1. /etc/postgresql/9.3/main/postgresql.conf 세트에서

    datestyle = 'iso, dmy' 또는 datestyle = 'iso, mdy'

  2. 가장 중요한 단계 : 항상 datestyle 재시작 후 postgres를 설정 한 후

    sudo service postgresql restart

    또는

    sudo /etc/init.d/postgresql restart

  3. 구성 테스트 가능

    DMY를 아래 쿼리로 설정하면 쿼리가 작동합니다.

    쿼리 : select '20/12/2016'::date 출력 : "2016-12-20"

    또는

    아래에서 MDY를 설정하면 쿼리가 작동합니다.

    쿼리 : select '12/19/2016'::date 출력 : "2016-12-19"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.