DB

[PostgreSQL] 기본 데이터 타입 정리 - UUID , Serial

지과쌤 2020. 9. 1.
반응형

  • Character types / why should we use char instead of varchar?
  • Numeric types
  • Boolean types
  • Temporal types
  • UUID for storing Universally Unique Identifiers
  • Array for storing array strings, numbers, etc...
  • JSON stores JSON data
  • hstore stores key-value pair
  • User defined data

UUID, Serial

암호화 알고리즘을 사용하여 만든 128비트짜리 문자열이다.

serial 타입보다 훨씬 복잡하다.

40e6215d-b5c6-4896-987c-f30f3678f608
6ecd8c99-4036-403d-bf84-cf8400f67836
3f333df6-90a4-4fda-8dd3-9485d27cee36

 

third-party module로써 추가적으로 설치를 해주어야한다.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

 

uuid v1는 mac address, current timestamp, random value를 조합하여 만든다. →날짜나 컴퓨터 정보를 좀 담고싶으면 요게 좋음

uuid v4는 따로 로직 없이 완전 랜덤으로

 

SELECT uuid_generate_v1();

//
           uuid_generate_v1
--------------------------------------
 0e37df36-f698-11e6-8dd4-cb9ced3df976
(1 row)
SELECT uuid_generate_v4();

//
           uuid_generate_v4
--------------------------------------
 a81bc81b-dead-4e5d-abff-90865d1e13b1
(1 row)

 

테이블 생성

CREATE TABLE contacts (
    contact_id uuid DEFAULT uuid_generate_v4 (),
    first_name VARCHAR NOT NULL,
    last_name VARCHAR NOT NULL,
    email VARCHAR NOT NULL,
    phone VARCHAR,
    PRIMARY KEY (contact_id)
);

 

데이터 삽입

INSERT INTO contacts (
    first_name,
    last_name,
    email,
    phone
)
VALUES
    (
        'John',
        'Smith',
        'john.smith@example.com',
        '408-237-2345'
    ),
    (
        'Jane',
        'Smith',
        'jane.smith@example.com',
        '408-237-2344'
    ),
    (
        'Alex',
        'Smith',
        'alex.smith@example.com',
        '408-237-2343'
    );

 

테이블 구성 결과

SELECT
    *
FROM
    contacts;

결과

 

serial 타입은 선언할 때 자동으로 not null을 선언하고 tablename_serialcolumn_seq sequence를 만들고 default nextval을 선언해준다.

CREATE TABLE teams
   (
      id SERIAL, 
      name VARCHAR(90)
   );
 
   -- is equivalent to 
   CREATE SEQUENCE teams_id_seq;
   CREATE TABLE teams
   (
      id INT NOT NULL DEFAULT NEXTVAL('teams_id_seq'), 
      name VARCHAR(90)
   );

//serial column을 unique 또는 primary key 선언을 해줄 수 있다.

이후 insert 할때 column명을 아예 누락시키거나 default 를 써넣으면 알아서 데이터가 들어간다.

 

*mysql에서는 force id generation 이라고 해서 0값에 대해서는 넣어줄 수 있지만, postgresql에서는 넣을 수 없다.

또, mysql에서는 시작 number, 증감폭을 지정해줄 수 있지만, postgresql에서는 0부터시작하고, 1씩 증가하는게 고정되어있다.

반응형

댓글

💲 추천 글