DB
-
[PostgreSQL] function (저장 프로시저)DB/PostgreSQL 2016. 12. 16. 16:47
postgresql의 function을 설명하기에 앞서 먼저 저장 프로시저를 설명하겠습니다. 타 데이터베이스에서 부르는 저장 프로시저는 PostgreSQL의 function (이하,. 함수)와 같은 개념이기 때문입니다.저장 프로시저란?저장 프로시저란 SQL 로 만든 함수입니다. 이 함수에 여러 SQL문을 작성해 사용합니다.사용 이유단위 하나로, 작업을 만들어 저장 할 수 있기 때문입니다. 모든 이유는 오로지 이 이유 때문입니다. 이 이유 때문에 얻게 되는 건 언어에서 함수를 사용 할 때 얻게 되는 이점과 같습니다. 예를 들어 작업이 단위로 구분되어 있어 디버깅이 쉬워지고 관리 또한 편해지고 반복작업을 없앨 수 있습니다.여기에 SQL 만이 얻는 장점이 하나 추가 할 수 있는데, 바로 보안입니다. 특정 유저..
-
[PostgreSQL] WITH ... AS, INSERT INTO .... ON CONFLICT .. DO UPDATE SET ..DB/PostgreSQL 2016. 12. 9. 21:04
여기서는 WITH ... AS 문을 사용하여 SELECT 결과가 없을 시 INSERT하는 쿼리, 로우가 1개 이상일 경우 UPDATE를 하고 그렇지 않으면 INSERT를 하는 쿼리 등을 설명합니다. 그리고 INSERT INTO .... ON CONFLICT .. DO UPDATE SET .. 문을 사용하여 보다 간편하게 로우가 없으면 INSERT, 존재하면 UPDATE를 하는 기능을 설명합니다.WITH ... AS여기서는 WITH ... AS 문에 대해 설명하기 보다 이를 사용해 다른 데이터베이스에 존재하는 upsert기능이나 select 결과가 없으면 insert를 하는 쿼리 등을 만들어 설명하겠습니다.upsert란 로우의 갯수가 1개 이상일 시, 사용자가 명시한 쿼리대로 레코드의 값을 update하고..
-
[PostgreSQL] 전체 데이터베이스, 스키마, 테이블 목록 조회DB/PostgreSQL 2016. 12. 8. 17:47
SELECT datname FROM pg_database -- 전체 데이터베이스 조회 SELECT datname FROM pg_database WHERE datistemplate = false -- 사용자가 생성한 데이터베이스만 조회 select nspname from pg_catalog.pg_namespace -- 현재 db의 전체 스키마 조회select tablename from pg_tables -- 전체 테이블 조회
-
[DB] 클러스터DB 2016. 11. 18. 22:14
클러스터란?디스크로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법 입니다.클러스터의 장점그룹된 컬럼 데이터 행들이 같은 데이터 Block에 저장되기 때문에 디스크 I/O를 줄여 줍니다.클러스터된 테이블 사이에 조인이 발생할 경우 그 처리 시간이 단축 됩니다.클러스터 키 열을 공유하여 한번만 저장하므로 저장 영역의 사용을 줄입니다. 테이블 클러스터링의 특징클러스터는 데이터 조회 성능을 향상 시키지만 데이터 저장, 수정, 삭제 또는 한 테이블 전체 Scan의 성능을 감소 시킵니다 클러스터 하기 좋은 테이블주로 조회가 자주 발생하고 수정이 거의 발생하지 않는 테이블컬럼안의 많은 중복 데이터를 가지는 테이블자주 Join되는 테이블 클러스..
-
[DB] 무결성 제약조건DB 2016. 11. 18. 21:46
무결성 제약조건이란?테이블 생성 시에 Constraint(제약조건)를 사용해서 입력하는 자료에 대해서 제약, 즉 규칙을 정해줄 수 있습니다. 이때 정해진 제약에 따라서 데이터가 입력이 됩니다. 만약 제약에 배반된다면 자료 입력이 거부되면서 오류가 납니다.네이버 지식백과에서는 데이터 무결성에 대해서 다음과 같이 서술하고 있습니다. 무결성 : 데이터 및 네트워크 보안에 있어서 정보가 인가된 사람에 의해서만 접근이나 변경이 가능한 성질 데이터 무결성 : 데이터를 인가하지 않은 방법으로 변경할 수 없도록 보호하는 성질 쉽게 말해서, 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태라고 생각하면 됩니다. 여기서 제약조건은 이러한 데이터 무결성을 보장함으로써 이상한 데이..
-
[DB] 트랜잭션, REDO와 UNDO 개념DB 2016. 11. 18. 21:19
트랜잭션이란?데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위입니다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미합니다.이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 영구성(Durability)을 보장합니다. 이 성질을 첫글자를 따 ACID라 부릅니다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 합니다. 다시말해서 트랜잭션은 데이터베이스 내에서 한꺼번에 수행되어야 할 일련의 연산들입니다. 간단하게 말해서 전부 성공하거나 전부 실패되거나 둘 중 ..
-
[DB] DDL, DML, DCL 이란?DB 2016. 11. 18. 20:47
명령어 종류 명령어 설명 데이터 조작어(DML : Data Manipulation LanguageSELECT 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함INSERTUPDATEDELETE 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함. 데이터 정의어(DDL : Data Definition Language)CREATEALTERDROPRENAMETRUNCATE 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.데이터 제어어(DCL : Data Control Language) GRANTREVOKE 데이터베이..
-
[SQL] SELECT 결과 UPDATEDB 2016. 11. 18. 13:11
select 결과를 update하는 방법은 여러가지가 존재합니다.Set Subqueryset 절에 subquery로 쿼리 결과를 update할 수 있습니다. 이 방법의 단점은 쿼리 결과가 0~1개 일때만 유효합니다. 만약 쿼리 결과가 1개 이상 나올 경우 에러가 납니다.UPDATE [테이블명] SET (컬럼, 컬럼1, ...) = (값, 값1, ... ) [WHERE conditions]; -- 예시 update test set (pk, id, name) = (select pk, id, name from test1 where pk = 1) -- 만약 해당 서브쿼리의 조회결과 갯수가 2개 이상일 시 에러From Subquery이 방법은 from절에 subquery를 넣어 사용하는 방법입니다. set절에 s..