DB
-
[PostgreSQL] 타입 변환 (type cast)DB/PostgreSQL 2017. 2. 22. 15:02
PostgreSQL에서 타입을 변경하는 함수는 아래와 같이 지원됩니다. CAST()먼저 SQL 표준인 CAST()입니다.CAST(value AS type) -- 예시 CAST(1234 AS TEXT)::다른 한가지는 PostgreSQL에서 지원하는 :: 입니다.value::type -- 예시 1234::TEXTPostgreSQL에서 지원하는 ::이 사용되는 특별한 경우는 '{apple,cherry apple, avocado}'::text[];를 문자열 리터럴인 {apple,cherry apple, avocado}로 변환하고 PostgreSQL이 text의 어레이로 해석하도록 합니다.함수형 형변환마지막으로 함수형처럼 사용할 수 있는 형식입니다.type(value) -- 예시 TEXT(1234) 이 방식은 ..
-
[PostgreSQL] 일주일의 시작 날짜, 마지막 날짜 구하기DB/PostgreSQL 2017. 2. 22. 14:15
주어진 날짜에서 일주일의 시작 날짜와 마지막 날짜를 PostgreSQL에서 지원하는 date_trunc()함수를 사용하여 계산할 수 있습니다.시작날짜 구하기SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp); -> 2012-07-23 00:00:00만약 timestamp가 아닌 date만 원한다면 아래와 같이 date 타입으로 변환하여 출력할 수 있습니다. SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp)::date; -> 2012-07-23마지막날짜 구하기SELECT (date_trunc('week', '2012-07-25 22:24:22'::timestamp)+ '6 days'::inter..
-
[DB]Connection PoolDB 2017. 2. 11. 23:19
Connection Pool이란?서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재합니다. 일반적인 Connection Pool을 이용하면 동시 접속자 수를 벗어나게 될 경우 에러(예외)가 발생하게 됩니다. 예외가 발생하면 그 접속자는 더이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 시도해야하는 불편함이 있습니다. 이를 해결하기 위해 탄생한 것이 Connection Pool 입니다. Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아놓고 관리한다는 개념입니다. 누군가 접속하면 자신이 관리하는 Pool에서 남아있는 Connection을 제공합니다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전환시킵니다. 그리..
-
[SQL] WHERE절에서 IF문처럼 AND 사용DB 2017. 2. 2. 16:55
SELECT ... FROM ... WHERE ( (A = 1 AND (B BETWEEN 0 AND 10) OR B=9999) OR (A = 2 AND (B BETWEEN 11 AND 20) OR B=9999) ) 위의 쿼리를 조건문으로 변경하면 아래와 같습니다.if (A==1) { B = 0 ~ 10 OR 9999 } else if (B==2) { B = 11 ~ 20 OR 9999 } WHERE절의 조건이기 때문에 결과는 boolean타입으로 TRUE 또는 FALSE만 나오게 됩니다.
-
[PostgreSQL] transaction isolationDB/PostgreSQL 2017. 1. 31. 10:00
SQL 표준은 transaction isolation에 대해 네 가지 레벨로 정의하고 있습니다. 이 네 가지중 가장 엄격한 것은 Serializable이며, 이것은 마치 여러 세션의 같은 트랜잭션 작업을 한 줄로 세워 차례 대로 진행하는 것과 같은 결과를 보장합니다. 나머지 세 가지 레벨은 동시에 진행되는 트랜잭션들 사이 간 허용되는 작업의 범위에 따라서 구분됩니다. 표준안에서는 Serializable이 가능한 transaction isolation 수준은 동시에 진행되는 트랜잭션 사이의 상호 관계가 전혀 없어야 한다고 정의합니다. (실 세계에서는 당연히 동시에 여러 트랜잭션들이 발생할 것이고, 이것들이 어떻게 서로 상호 관계를 안 할 수 있을까? 라는 의문점을 남깁니다.)각 수준별 이름과 상호 작용 범..
-
[PostgreSQL] PL/pgSQL Block StructureDB/PostgreSQL 2016. 12. 23. 11:22
PL/pgSQL 함수는 블럭 구조로 되어있으며 아래와 같은 문법을 따르고 있습니다.[ ] [ DECLARE declarations ] BEGIN statements; ... END [ label ]; 각 블록에는 declaration과 body라는 두 개의 섹션이 있습니다. body 섹션은 필수적인 반면, declaration 섹션은 선택 사항입니다. 블록은 END 키워드 다음에 세미콜론 (;)으로 끝납니다.블록에는 시작과 끝 부분에 추가적인 label이 있을 수 있습니다. 이 label의 처음과 끝은 동일해야합니다. 이 블록 label은 EXIT 문에서 블록을 사용하거나 블록에서 선언 된 변수의 이름을 정규화하려는 경우에 사용됩니다.declaration 섹션은 body 섹션에서 사용되는 모든 변수를 선..
-
[PostgreSQL] Schema 변경DB/PostgreSQL 2016. 12. 23. 09:48
set search_path to 변경할 스키마; -- 예시 abcd.temp1 public.temp2 과 같이 abcd 스키마에는 temp1 테이블, public 스키마에는 temp2 테이블이 존재한다고 가정 select * from temp1; ERROR: relation "temp1" does not exist set search_path to abcd; -- abcd스키마로 변경 select * from temp1; -- 성공
-
[PostgreSQL] pq: current transaction is aborted, commands ignored until end of transaction block 에러 해결법DB/PostgreSQL 2016. 12. 20. 17:20
해당 오류는 트랜잭션 수행 중간에 쿼리가 오류를 생성되고 롤백을 실행하지 않고 다른 쿼리를 실행하려고 할 때 PostgreSQL이 발생시키는 에러입니다. 이 문제를 해결하려면 잘못된 쿼리가 실행되는 코드의 위치를 파악해야합니다. postgresql 서버에서 log_statement와 log_min_error_statement 옵션을 사용하면 도움이 됩니다. 또는 에러가 발생되는 해당 쿼리 부분의 데이터들을 전부 truncate 하면 해결되기도 합니다. 문제점트랜잭션 블록에서 쿼리 실행 열려있는 트랜잭션 블록에 잘못된 구문 또는 잘못된 쿼리가 실행되어 오류가 발생 오류로 인해 트랜잭션 블록이 유효하지 않아져 다음 트랜잭션부터 오류가 발생 이러한 문제가 발생되면 트랜잭션을 롤백하고 전체 데이터를 초기화 시키..
-
[PostgreSQL] psql 명령어DB/PostgreSQL 2016. 12. 16. 18:02
postgres 데이터베이스에 postgres 유저 접속$ psql -U postgres -d postgres postgres 사용자의 암호:psql에 지정한 비밀번호로 접속$ PGPASSWORD=password psql -U postgres -d postgres psql (9.5.4) 도움말을 보려면 "help"를 입력하십시오. postgres=#psql에서 query 실행$ PGPASSWORD=password psql -U postgres -d postgres -c 'select * from test'psql에서 .sql 파일에 저장되어 있는 쿼리 실행$ PGPASSWORD=password psql -U postgres -d postgres -f test.sql $ PGPASSWORD=password..