DROP TABLE IF EXISTS를 이용하면 테이블이 존재하지 않을 때만 테이블 삭제를 시도하는 것이 가능하다. 그러나 standard SQL은 아니다. 



컬럼에 default value를 가지게 할 수도 있음 - 데이터가 insert되는 시점에 값이 들어감...timestamp같은 경우에 유용하게 사용가능

CREATE TABLE products (

product_no integer,

name text,

price numeric DEFAULT 9.99

);




integer type에 다음 값으로 채워넣기

CREATE TABLE products (

product_no integer DEFAULT nextval(’products_product_no_seq’),

...

);


nextval이라는 함수가 따로 있음



제약조건 걸기(check constraints)

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0)

);


제약 조건에 이름 붙여서 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CONSTRAINT positive_price CHECK (price > 0)

);


컬럼과의 관계로 제약조건 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0),

discounted_price numeric CHECK (discounted_price > 0),

CHECK (price > discounted_price)

);


여러개의 제약 조건 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0),

discounted_price numeric,

CHECK (discounted_price > 0 AND price > discounted_price)

);

It’s a matter



외래키 있는 데이터 삭제시 2가지 대응 옵션

CREATE TABLE order_items (

product_no integer REFERENCES products ON DELETE RESTRICT, 삭제 시도 시 에러남, 딸린 데이터들 다 삭제하고 나서야 이 데이터 삭제가 가능함.

order_id integer REFERENCES orders ON DELETE CASCADE, 삭제 시도시 붙어있는 데이터들 다 같이 삭제..

quantity integer,

PRIMARY KEY (product_no, order_id)

);



스키마와 권한


스키마 search path 보기

show search_path

결과중 가장 첫번째에 있는 것이 current schema라고 볼 수 있음

set serch_path to myschema, public; 이런 식으로 serch path 설정이 가능함


schema사용을 위해서는 기본적으로 Usage 권한이 부여되어야 한다.

public schema에는 기본적으로 모든 사용자에게 create과 usage건한이 부여됨. 

->맘에 안들면 revoke하면 됨.(revoke create on schema public from public)


pg_catalog schema

system tables, built-in data types, functions, operator를 포함한 스키마


상속

상속시의 부모 테이블의 check constraints와 not-null constraints는 상속되지만, 다른 constraints(unique, primary key, foreign key)는 상속되지 않음




컬럼수에 제한이 있는데, 타입에 따라 다르나 250개에서 1600개 사이이다.

출처: PostgreSQL 투토리얼 50페이지

+ Recent posts