Postgre에서 UTC의 현재 시간을 기본값으로 사용SQL
나는 의 칼럼을 가지고 있습니다.TIMESTAMP WITHOUT TIME ZONE
를 입력하고 이 기본값을 UTC의 현재 시간으로 설정합니다.UTC에서 현재 시간을 얻는 것은 쉽습니다.
postgres=# select now() at time zone 'utc';
timezone
----------------------------
2013-05-17 12:52:51.337466
(1 row)
열의 현재 타임스탬프를 사용하는 경우:
postgres=# create temporary table test(id int, ts timestamp without time zone default current_timestamp);
CREATE TABLE
postgres=# insert into test values (1) returning ts;
ts
----------------------------
2013-05-17 14:54:33.072725
(1 row)
하지만 그것은 현지 시간을 사용합니다.강제로 UTC로 설정하려고 하면 구문 오류가 발생합니다.
postgres=# create temporary table test(id int, ts timestamp without time zone default now() at time zone 'utc');
ERROR: syntax error at or near "at"
LINE 1: ...int, ts timestamp without time zone default now() at time zo...
기능은 필요하지도 않습니다.기본 식 주위에 괄호를 붙이면 됩니다.
create temporary table test(
id int,
ts timestamp without time zone default (now() at time zone 'utc')
);
또 다른 해결책:
timezone('utc', now())
함수로 래핑합니다.
create function now_utc() returns timestamp as $$
select now() at time zone 'utc';
$$ language sql;
create temporary table test(
id int,
ts timestamp without time zone default now_utc()
);
어때
now()::timestamp
다른 타임스탬프에 표준시가 없는 경우 이 캐스트는 현재 시간에 대해 "표준시가 없는 타임스탬프" 유형을 생성합니다.
하지만 저는 다른 사람들이 그 옵션에 대해 어떻게 생각하는지 읽고 싶습니다.저는 여전히 이 "있는/없는" 시간대에 대한 제 이해를 신뢰하지 못합니다.
편집: Michael Ekoka의 의견을 여기에 추가하는 것은 중요한 점을 명확히 하기 때문입니다.
주의. 이 질문은 표준 시간대를 저장하지 않는 타임스탬프 열에 대한 UTC의 기본 타임스탬프를 생성하는 것입니다(모든 타임스탬프가 동일하게 공유된다는 것을 알고 있는 경우에는 표준 시간대를 저장할 필요가 없기 때문일 수 있습니다).솔루션이 수행하는 작업은 로컬 타임스탬프(대부분의 사용자에게 UTC로 설정될 필요는 없음)를 생성하고 이를 단순 타임스탬프(시간대를 지정하지 않음)로 저장하는 것입니다.
다음과 같은 두 가지 솔루션이 있습니다.
(다음 코드에서, 당신은 대체해야 합니다.'UTC'
구역 및now()
타임스탬프의 경우)
timestamp AT TIME ZONE zone
SQL 표준 준수timezone(zone, timestamp)
틀림없이 더 읽기 쉬운.
함수 시간대(존, 타임스탬프)는 SQL 준수 구성 타임스탬프 AT TIME ZONE 존과 동일합니다.
설명:
- 영역은 텍스트 문자열로 지정할 수 있습니다(예:
'UTC'
) 또는 간격(예:INTERVAL '-08:00'
) - 사용 가능한 모든 시간대 목록입니다. - 타임스탬프는 타임스탬프 유형의 값일 수 있습니다.
now()
데이터베이스의 기본 표준 시간대가 연결된 형식 타임스탬프 값(필요한 값만)을 반환합니다(예:2018-11-11T12:07:22.3+05:00
).timezone('UTC', now())
현재 시간(시간대가 있는 타임스탬프 유형)을 시간대가 없는 시간대로 변환합니다.UTC
.
예.,SELECT timestamp with time zone '2020-03-16 15:00:00-05' AT TIME ZONE 'UTC'
돌아올 것입니다2020-03-16T20:00:00Z
.
함수가 이미 있습니다. 시간대(')UTC'::text, now()
언급URL : https://stackoverflow.com/questions/16609724/using-current-time-in-utc-as-default-value-in-postgresql
'programing' 카테고리의 다른 글
PostgreSQL 'NOT IN' 및 하위 쿼리 (0) | 2023.05.12 |
---|---|
GUID가 GUID인지 확인하는 방법 (0) | 2023.05.12 |
판다가 인식하는 모든 d타입은 무엇입니까? (0) | 2023.05.12 |
도커화된 Postgre 백업/복원SQL 데이터베이스 (0) | 2023.05.12 |
nvm을 사용하여 Node.js 버전을 변경하는 방법 (0) | 2023.05.12 |