DB/PostgreSQL
-
[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..
-
[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..
-
[PostgreSQL] function (저장 프로시저)DB/PostgreSQL 2016. 12. 16. 16:47
postgresql의 function을 설명하기에 앞서 먼저 저장 프로시저를 설명하겠습니다. 타 데이터베이스에서 부르는 저장 프로시저는 PostgreSQL의 function (이하,. 함수)와 같은 개념이기 때문입니다.저장 프로시저란?저장 프로시저란 SQL 로 만든 함수입니다. 이 함수에 여러 SQL문을 작성해 사용합니다.사용 이유단위 하나로, 작업을 만들어 저장 할 수 있기 때문입니다. 모든 이유는 오로지 이 이유 때문입니다. 이 이유 때문에 얻게 되는 건 언어에서 함수를 사용 할 때 얻게 되는 이점과 같습니다. 예를 들어 작업이 단위로 구분되어 있어 디버깅이 쉬워지고 관리 또한 편해지고 반복작업을 없앨 수 있습니다.여기에 SQL 만이 얻는 장점이 하나 추가 할 수 있는데, 바로 보안입니다. 특정 유저..