본문 바로가기

PostgreSQL

DB-Engines Ranking (PostgreSQL) PostgreSQL 랭크가 점점 올라가고 있는듯 하다. 잠간 써본 경험으로 결론부터 말하자면 무료 치고는 좋은것 같다. 유료에 비해서는 기능이 많이 부족한건 사실이나, 마리아보다는 안정적인것 같고, 성능도 무거운 쿼리 기준에선 좋아 보인다. (단. trace 기능등 사용자 편의 사항은 마리아보다 더 약해 보인다. 기본적으로는 힌트사용도 불가능 하다.) 유료인 ms 에 비해서도 성능적인 측면만 본다면 비슷하거나 조금 나아보이기도 한다. 비슷한 양의 데이터 집계, 정렬등등 수행 시간도 크게 부족함이 없다. 서비스가 OLTP 형태의 가벼운 쿼리라면 마리아나,MS 보다는 약간 느린듯한데 실제 재직중인 회사에서의 베타 테스트때도 다소 미흡한 성능을 보여주었다. ERP, CRM, WMS 등의 서비스에 어울릴 만한 .. 더보기
group by + limit 의 성능 이슈 테스트 데이터 생성(테이블 생성 + 벌크 데이터) CREATE TABLE public.test2m ( id serial primary key, timeslice timestamp , system_idVARCHAR(100), group_idVARCHAR(100), agent_nameVARCHAR(100), svc_nameVARCHAR(100), COUNTINT ); INSERT INTO public.test2m (timeslice, system_id, group_id, agent_name, svc_name, COUNT) SELECT now() as timeslice, LEFT(md5(random()::text),3) as system_id, LEFT(md5(random()::text),5) as group.. 더보기
PostgreSQL composite types in SQL queries type 을 인자로 받고 return 도 type 으로 하기 type 을 인자로 받기때문에 인자의 갯수가 1개이상 늘어나지 않게 할수 있음 인자를 나중에 추가해도 인자갯수가 늘어나지 않음(오버로딩) 한개의 인자를 여러건 검색할경우가 있으므로 in 조건이 들어올 가능성이 있는 항목은 배열 처리 단점 : type 을 삭제 할수 없음 CREATE TYPE test1m_type AS ( id INTEGER ,timeslice TIMESTAMP ,system_id CHARACTER VARYING(100) ,group_id CHARACTER VARYING(100) ,agent_name CHARACTER VARYING(100) ,svc_name CHARACTER VARYING(100) ,count INTEGER ) .. 더보기
Postgresql 변수 / 바인드 / 매개변수 처리 $1, $2 순서대로 바인딩되고 변수의 이름을 바꿀수 없다.(갯수가 다르면 에러) CREATE OR REPLACE FUNCTION report_get_countries_new (starts_with text , ends_with text = NULL) RETURNS SETOF lookups.countries AS $func$ DECLARE sql text := 'SELECT * FROM lookups.countries WHERE country_name >= $1'; BEGIN IF ends_with IS NOT NULL THEN sql := sql || ' AND country_name 더보기
[postgreSQL] Function 구조 postgreSQL에서는 Function과 Store Procedure의 구분이 없다. - 대략적인 구조 CREATE OR REPLACE FUNCTION 함수이름 (파라미터명 파라미터타입, ....) RETURNS 리턴타입 // RETURN 타입이 테이블일 경우 TABLE(컬럼명 컬럼타입, ....) LANGUAGE 사용언어 [COST 최대사용자원(숫자임)] [VOLATILE, STABLE, IMMUTABLE] // 택1, Function수행에 필요한 Query실행 시 최적화와 관련된 부분.. AS [$[함수의 정의를 지칭할 변수명]$] //함수정의 DECLARE // 변수 선언 및 정의 변수명 변수타입, .... BEGIN // 로직시작 [ IF 조건문 THEN 로직 ELSE 로직 END IF; ] [.. 더보기
PostgreSQL 비 결정적 변수에 대한 실행 계획 변수 v_id 값이 공백인 경우와 공백이 아닌 경우에 따라 실행 계획이 달라져야 하는데 SQL Server 의 경우 실행 계획 재 사용을 위해 2가지 상태의 실행 계획을 동시에 가지고 있는다 두 가지 모두 가지고 있는다는 의미는 변수 값이 공백이 아니면 or 절 이후 쿼리는 필요 없으나 실행 계획에 포함되어 있어 조회를 하게 된다. 그러나 PG 의 경우 실행계획을 재활용 하지 않기 때문에 결정된 변수의 값에 따라 플랜을 만들므로 SQL Server 와 같은 성능 이슈는 발생하지 않는다. CREATE OR REPLACE FUNCTION get_test1m ( v_id character varying, v_system_id character varying ) RETURNS TABLE ( id integer,.. 더보기