타입을 date 로 주고 추가를 하든, alter를 하든 항상 timestamp with out time zone 형태로 바뀌네요...
create table 테이블명 as
select currnet_date;
이렇게 하면 date 로 되긴하는데,,
create table 테이블명 (
컬럼명 date
);
이렇게 하면 timestamp 가 되버리니...
뭐가 문제인지 찾아봐도 답이 없어서.. 답답한 마음에 질문드려봅니다.
PostgresDBA2019-10-24 (목) 09:47
pg 아니고 edb 에서는
create table 시에 지정하는 date 형은 오라클 호환성을 위해서 날짜+시간까지 포함되어 있습니다.
그래서 timestamp 로 변환된는거구
current_date 는 시간정보가 없습니다.
그래서 pg 에서의 date 형으로 변환되는걸로 보이네요
근데 이게 뭐가 문제일까요?
댓글주소
옆집아저씨2019-10-25 (금) 14:54
pg는 edb든 둘다 똑같이 자동 변환이 되는듯하구요,,
저장되는 크기가 date형은 4byte, timestamp는 8byte로 알고있어요.
그리고 데이터 타입이 엄현이 다르게 각각 정의되어있는데 호환성이라는 이유로 자동으로 date를 timestamp 로 임의로 바꿔버리는것은 문제점이라고 여겨집니다.
그럼 date 형이 있을 이유가 없지요. 써먹지도 못하는데..
자동으로 변환되지 않도록 어떤 설정값을 통해 조절할 수 있을듯 한데요.. 찾아도 답을 얻기가 힘드네요..
edb=# select version();
version
------------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 11.5 (EnterpriseDB Advanced Server 11.5.12) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
(1 row)
edb=# create table zz(z date);
CREATE TABLE
edb=# \dS+ zz
Table "public.zz"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+-----------------------------+-----------+----------+---------+---------+--------------+-------------
z | timestamp without time zone | | | | plain | |
edb=#
--
pg date 는 날짜만 저장하는 4 bytes
edb date 는 오라클 호환성을 위해 날짜+시각 까지 저장하는 8 bytes timestamp