17. 번호 자동 증가(SQL 표준)
INT GENERATED ALWAYS AS IDENTITY
CREATE TABLE color (
color_id INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 10 INCREMENT BY 10),
color_name VARCHAR NOT NULL
);
18. 데이터 입력
1) insert
- into, select
2) select into
3) copy
4) create table as
19. insert into
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [,
...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...]
]
26. 데이터 조회
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
27. 데이터 조회 실전
select * from korea_park where park_type = '어린이공원'
select count(*) from korea_park where park_type = '근린공원'
select part_type, count(park_type) from korea_park group by
park_type
28. 데이터 조회 실전
select * from korea_park limit 10 offset 0;
select * from korea_park order by park_type asc
29. window 함수
row_number, rank 등과 같은 함수가 window 함수에 속합니다.
추가적인 함수는
https://www.postgresql.org/docs/9.6/static/functions-window.
html 에서 살펴볼 수 있습니다.
30. JOIN
SQL의 조인은 기본적으로 테이블과 테이블의 행을 서로 묶는데 사용합니다. 조인의
가장 기본적인 형태는 카테시안 조인으로 조인 조건을 지정하지 않는 조인을
일컫습니다.
no name created
1 jiho 201
2 postgres 202
no article_no content
3 1 c01
4 1 c02
1 jiho 201 3 1 c01
1 jiho 201 3 1 c02
2 postgres 202 3 1 c01
2 postgres 202 3 1 c02
41. insert 충돌을 해결하기
테이블에 데이터 입력시 이미 있는 레코드를 추가하면 레코드
충돌로 데이터가 입력되지 않습니다. conflict 옵션을 사용하면
데이터 충돌시 해결책을 제시할 수 있습니다.
insert into korea_park(manage_no, park_name, park_type)
values ('29170-00001', '문화근린공원', '근린공원')
42. insert 충돌시 아무것도 안하기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'근린공원') on conflict (manage_no) do nothing;
43. 데이터 충돌시 데이터 덮어쓰기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'어린이공원') on conflict (manage_no) do update
set park_type=excluded.park_type;
45. update시 다른 테이블과 조인
UPDATE employees SET sales_count =
sales_count + 1 FROM accounts
WHERE accounts.name = 'Acme Corporation'
AND employees.id = accounts.sales_person;
47. 데이터 삭제 시 다른 테이블과 조인하기
DELETE FROM films USING producers
WHERE producer_id = producers.id AND
producers.name = 'foo';
48. 역할 생성과 제거
create role reader1 login password 'reader1';
create role reader2 login password 'reader2';
49. 권한 부여
grant select (park_name, park_addr_road) on
korea_park to reader1;
grant select (park_name, park_lat, park_long)
on korea_park to reader2;
50. 권한 제거
revoke select (park_name, park_addr_road) on
korea_park from reader1;
revoke select (park_name, park_lat, park_long)
on korea_park from reader2;
51. truncate
truncate는 테이블의 모든 행을 한 번에 지우는 명령입니다.
TRUNCATE korea_park;
truncate korea_park RESTART IDENTITY;
52. 트랜잭션
데이터베이스 조작의 일관성을 보장하기 위한 행동 묶음을
트랜잭션이라고 부릅니다
begin transaction;
commit;
rollback;
end;
53. 트랜잭션
트랜잭션이 시작된 이후 에러가 발생하면 에러가 발생한 이후의
SQL 문장은 유효한 SQL 문장이라고 해도 실행되지 않습니다.
54. PostgreSQL 데이터 타입
bigint, boolean
character, character varying
date, integer
json, numeric
text
timestamp
55. vacuum
1) 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위한 디스크
공간 확보 작업이 필요하다.
2) PostgreSQL 쿼리 실행 계획기가 사용할 자료 통계 정보를 갱신할 필요가 있다.
3) 인덱스 전용 검색 성능을 향상하는데 이용하는 실자료 지도(visibility map, vm) 정보를
갱신하는 작업이 필요하다.
4) 트랜잭션 ID 겹침이나, 다중 트랙잭션 ID 겹침 상황으로 오래된 자료가 손실 될
가능성을 방지해야할 필요가 있다.
56. 베이큠 작업의 실행
-- DB 전체 풀 실행
vacuum full analyze;
-- DB 전체 간단하게 실행
vacuum verbose analyze;
-- 해당 테이블만 간단하게 실행
vacuum analyse [테이블 명];
-- 특정 테이블만 풀 실행
vacuum full [테이블명];