설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 187건, 최근 0 건
   

date 타입 컬럼을 추가할때 문제점

글쓴이 : 옆집아저씨 날짜 : 2019-10-23 (수) 15:53 조회 : 4142
타입을 date 로 주고 추가를 하든, alter를 하든 항상 timestamp with out time zone 형태로 바뀌네요...

create table 테이블명 as
select currnet_date;
이렇게 하면 date 로 되긴하는데,,

create table 테이블명 (
컬럼명 date
);
이렇게 하면 timestamp 가 되버리니...

뭐가 문제인지 찾아봐도 답이 없어서.. 답답한 마음에 질문드려봅니다.

PostgresDBA 2019-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 형이 있을 이유가 없지요. 써먹지도 못하는데..
자동으로 변환되지 않도록 어떤 설정값을 통해 조절할 수 있을듯 한데요.. 찾아도 답을 얻기가 힘드네요..
댓글주소
PostgresDBA 2019-10-25 (금) 20:43
edb 만 자동 변환됩니다. 아래를 보세요.

[pg]
======================================================================================================

SQL> select version();
+----------------------------------------------------------------------------------------------------------------------------------+
|                                                            version                                                              |
+----------------------------------------------------------------------------------------------------------------------------------+
| PostgreSQL 11.5 (Debian 11.5-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit |
+----------------------------------------------------------------------------------------------------------------------------------+
(1 row)

Time: 1.118 ms
SQL> create table zz(z date);
CREATE TABLE
Time: 12.706 ms
postgres@[local]:9081:postgres(20:39:56)
SQL> \dS+ zz
                                    Table "public.zz"
+--------+------+-----------+----------+---------+---------+--------------+-------------+
| Column | Type | Collation | Nullable | Default | Storage | Stats target | Description |
+--------+------+-----------+----------+---------+---------+--------------+-------------+
| z      | date |          |          |        | plain  |              |            |
+--------+------+-----------+----------+---------+---------+--------------+-------------+


SQL>


[edb]
======================================================================================================

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
댓글주소
   

postgresdba.com