본문 바로가기
프로N잡러/프로그래밍&자격증

[GPDB] 4-3. Data Definition Language(DDL) : Data Types

by 뮤지구 2024. 1. 9.

Data Types


  • postgresql 기반의 data type 모두 사용
  • 최소한의 공간을 차지하도록 컬럼 데이터 타입 지정
  • join 에 사용하는 컬럼의 경우 동일한 data type + 동일 자릿수 사용 권장
    - table1(col1 int, col2 int), table2(col1 char, col2 char) 인 경우 
       > 값이 같아보여도 컬럼 타입이 다르면 local join 불가.
    - table1(col1 char(10)), table(col char(20)) 인 경우 
       > 값이 같아보여도 컬럼 길이가 다르면 local join 불가.
      (각각의 컬럼 내 공백을 포함하여 hash 값을 만들기 때문에 다른 값으로 인식)
    - table1(col1 bigint), table(col smallint) 인 경우 
       > 값이 같아보여도 컬럼 타입이 다르면 local join 불가.
    - table1(col1 varchar(10)), table(col varchar(20)) 인 경우
       > 가변 데이터 타입이기 때문에 local join 가능.
  • Data type 종류
    - array type : 컬럼당 1G 까지 저장 가능
    - jsonb (GPv6 부터 지원)


실습


1) numeric : exact calculations

SELECT POWER(2::DOUBLE PRECISION, 64::DOUBLE PRECISION);
-------------------------------------
1.84467440737096E+19

SELECT POWER(2::NUMERIC, 64::NUMERIC);
----------------------------------------------------------------
18446744073709551615.0000000000000000

SELECT POWER(2::NUMERIC , NUMERIC NUMERIC(20);
----------------------
18446744073709551615

 

2) data and time

SELECT '2008-10-11':: TIMESTAMP
--------------------------------
2008-10-11 00:00:00

SELECT 'JANUARY 5 2007'::TIMESTAMP
--------------------------------
2007-01-05 00:00:00

SELECT '2008-10-11 12:33:25':: DATE
--------------------------------
2008-10-11

SELECT '2005-08-10 03:25:00PM UTC':: TIMESTAMPTZ
--------------------------------------
2005-08-10 15:25:00+00

SELECT 'Wed Feb 20 10:06:22 UTC 2019'::TIMESTAMPTZ
--------------------------------------
2019-02-20 10:06:22+00

 

3) Change time zone temporarily

SELECT NOW();
--------------------------------------------------
2019-02-20 10:11:47.845698+00

SET TIME ZONE 'ASIA/SEOUL';
SELECT NOW();
--------------------------------------------------
2019-02-20 19:16:45.818178+09

SELECT NOW() AT TIME ZONE 'Europe/Moscow';
--------------------------------------------------
2019-02-20 13:20:05.053911

 

4) Calculate time differences

SELECT '2000-01-05'::TIMESTAMP --'2000-01-01'::TIMESTAMP;
--------------
4 DAYS

SELECT '2000-01-01'::TIMESTAMP --'2000-01-04'::TIMESTAMP;
---------------
3 DAYS

SELECT '2005-10-23 00:23:12'::TIMESTAMP --'2005-10-12 07:05:25'::TIMESTAMP;
--------------------------
10 days 17:17:47

SELECT '2000-02-28 00:00:00'::TIMESTAMP + INTERVAL '1 day 02:00:00';
-------------------------------
2000-02-29 02:00:00

SELECT '2001-01-01'::DATE --'2000-01-01'::DATE;
--------------
366

 

5) Object Identifier Type : OID

SELECT 'PG_CLASS'::REGCLASS::OID;
--------
1259

SELECT OID FROM PG_CLASS WHERE RELNAME = 'PG_CLASS';
--------
1259

 

6) Casting Data Types