오랫만에 들른 PostgreSQL 홈페이지 첫 화면에서 15 버전이 정식 배포되었다는것을 알게 되었다.

Release note : https://www.postgresql.org/about/news/postgresql-15-released-2526/

 

PostgreSQL 15 Released!

**October 13, 2022** - The PostgreSQL Global Development Group today announced the release of [PostgreSQL 15](https://www.postgresql.org/docs/15/release-15.html), the latest version of …

www.postgresql.org

WAL file 압축, Window function 성능 향상, json format의 로그 지원 등등 여러가지가 설명되어 있는데, 내 시선을 강탈한건 바로 "MERGE 구문 지원"

PostgreSQL 15 includes the SQL standard MERGE command. MERGE lets you write conditional SQL statements that can include INSERT, UPDATE, and DELETE actions within a single statement.

 

 Oracle로 DBA 생활을 시작해서인지 PostgreSQL에서는 merge 구문을 지원하지 않는 점이 참 아쉬웠었다. 그동안 PostgreSQL에서는 with 구문을 이용해서 insert와 update를 한번에 처리했었지만, 이제 다른 선택지가 생겼으니 잘 돌아가는지 테스트 해봐야겠다. 곧 테스트할 시간이 생기겠지... 지금은 안돼... 힘들다.

 

https://www.postgresql.org/docs/15/sql-merge.html

 

MERGE

MERGE MERGE — conditionally insert, update, or delete rows of a table Synopsis [ WITH with_query [, ...] ] MERGE …

www.postgresql.org

 

Oracle 11g에서 디비 문제 원인 분석을 위한 정보 수집 방법을 설명한 글이다.

https://kr.forums.oracle.com/forums/thread.jspa?threadID=1057734&tstart=0

위의 링크를 따라가면 원문을 볼 수 있다.


오라클11g는 로그와 트레이스 파일의 생성 및 관리가 기존과 많이 다르다. adr이라는 로그와 트레이스 파일을 통합 관리 툴(? 시스템?)이 있어서 생각보다 편리하게 쓸 수 있다.

iPhone 에서 작성된 글입니다.
드디어 PostgreSQL 9.2.2가 나왔습니다.
큰 문제들은 이제 다 정리된듯 합니다.

http://www.postgresql.org/about/news/1430/

iPhone 에서 작성된 글입니다.
지난번에 Postgres-XC 1.0.0에 대해서 글을 올렸는데 아직 문제가 좀 있다고 했었죠 이번에 1.0.1 버전을 테스트한 결과를 정리해서 올립니다. 짧게 얘기하면 "좋아졌다"입니다. ^^/


• 1.0.1 버전 개요
Postgres-XC 1.0.1은 PostgreSQL 9.1.5를 기반으로 만들어졌습니다.


• 지난버전 테스트 결과와 다른 점
1. 관리 툴
pgAdmin III 1.16.0 버전을 사용하면 오류메시지없이 접속됩니다. 한가지 아쉬운점이라면 dbms 버전 정보에는 PostgreSQL 9.1.5로 표시된다는 점입니다.

2. 트랜잭션 문제 해결
함수 내부에서 "select for update"로 데이터를 가져와서 다이나믹쿼리로 update문을 실행하면 일부 세션에서 데이터를 잘못가져오는 문제가 해결되었습니다.
1번 세션에서 begin 명령으로 트랜잭션을 시작한 후, 해당 함수를 실행한 뒤에 2번 세션에서 함수를 실행했을때 1번 세션의 트랜잭션이 종료된 후 update된 값을 "select fir update"로 가져와서 update해줍니다. 정상적으로 작동한다는 얘기입니다.
제 설명이 좀 복잡한가요? 회사에서 아이폰으로 작성하는거라 좀 시간도 부족하고 글 쓰기도 좀 힘드네요. 다음에 코드와 함께 집에서 다듬어서 적성하겠습니다.



iPhone 에서 작성된 글입니다.
지난주에 테스트 용도로 Oracle 11g R2를 설치한 적이있다. 설치는 참 오랫만이었는데, 기본 옵션을 보니 Spatial이 설정되어있었다. 음 지리정보를 이용한 서비스가 많아져서인지 이게 언제부터 기본으로 지원되었던거지?

음 공부를 소흘히하면 안되겠어.

iPhone 에서 작성된 글입니다.
PostgreSQL을 사용하다보니 같은 DB내에서 혹은 다른 DB에 존재하는 테이블의 view를 만들어놓고 사용하는 경우가 종종 있다. (PostgreSQL의 디비링크가 아주 불편하기 때문이기도하고, DA분이 너무 정규화를 잘 해놓았기 때문이기도 하다.)

PostgreSQL에서 처음에 뷰를 만들었을때...... 신기하게도 select만 가능한지 몰랐었다. update문을 실행해보고서야 곤란한 문제가 생겼다는것을 알게되었고, 곧바로 구글 검색과 메뉴얼 검색을 통해서 rule이라는걸 찾게되었다.

rule이란 걸 이용하면 뷰에서 DML문이 실행되면 해당 rule에 맞는 부분만 실행이 되더군요.

예를들어서 update 구문에 대한 rule을 만들면서 "update emp set ename where empno = new.empno"라고 쿼리문을 설정해주면 이 뷰에서는 ename 컬럼만 수정이 가능해집니다.

재밌는 기능이죠. 좀더 자세한 기능과 예제는 다음에 정리해서 올리겠습니다.

iPhone 에서 작성된 글입니다.
Open source RDBMS인 PostgreSQL은 현재 9.1.3버전까지 나온 잘 만들어진 DBMS이지만 아주 큰 약점들이 있다. 오늘은 그중 하나인 계층형 쿼리 기능에 대한 해법을 말해보고자한다.
계층형 쿼리, Hierachical Query는 보통 조직도나 다단계 분류표 등의 구조를 나타내는데 쓰는 구문으로 Oracle RDBMS에서 "start with ~ connect by~"의 형태로 쓰며, 보통 "connect by"로 불리운다. 그런데 PostgreSQL에서는 계층형 쿼리를 쓰려면 추가 모듈을 설치해야 하는데, 이 모듈을 설치하면 쓸 수 있는 connectby라는 함수는 속도가 아주 느리다. 그래서 "connect by"를 따로 구현해 보았다.

입력받은 테이블과 컬럼 이름으로 "with recursive" 구문을 문자열로 만들어서 PL/pgSQL의 dynamic query를 이용해서 실행하고, 결과를 result set 형식으로 반환하는 방식이다.


create or replace udf_connect_by (tab_name varchar, key_name varchar, parent_key_name varchar, start_with varchar)
return SETOF record
as $$
declare
v_rowcnt integer;
v_query varchar;
begin
select count(*) into v_rowcnt
from pg_tables
where tablename = tab_name;

if v_rowcnt = 0 then
raise exception 'Invalid table name';
end if;

v_query := 'with recursive T1(select *, 1 as r_level, array[' || key_name || '::varchar] as r_path, false r_flag
from ' || tab_name || '
where ' || start_with || '
union all
select B.*, T1.r_level + 1 as r_level, array_append(T1.r_path, ' || key_name || '::varchar) as r_path, B.' || key_name || '::varchar = any(T1.r_path) as r_flag
from ' || tab_name || ' B, T1
where not r_flag
and B.' || parent_key_name || ' = T1.' || key_name || ')
select * from T1 order by T1.r_path ';

return query execute v_query;



end;
$$
language pl/pgsql
;



iPhone 에서 작성된 글입니다.


약 3주일 정도 PostgreSQL을 써본 감상.

뭐랄까 이것 저것 다 되는듯하면서 안 되거나 모양새가 묘하네요.
디비 링크가 좀 불편하고요. 뭐 아직 방법을 못 찾은거닐수도 있지만요...
음 열심히 공부 중 입니다.

iPhone 에서 작성된 글입니다.
오래전에 분산 트랜잭션 관련 오류가 있었을때 처리한 내용입니다. 출처가 기억이 나지 않아서... (원서였는지, 한글로된 블로그 글이었는지...)

두 개의 DB 사이에서 "Database Link"를 이용하여 쿼리를 실행하는 프로시져가 주기적으로 실행될 때, "ORA-01591" 오류가 발생했다. 이럴때의 처리방법.

SQL> SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, HOST, COMMIT# FROM DBA_2PC_PENDING;

위의 쿼리로 확인 했을 때, MIXED가 'NO', STATE가 'PREPARED'일 때.

SQL> ROLLBACK FORCE 'TRANS_ID';
혹은
SQL> COMMIT FORCE 'TRANS_ID';


STATE 상태가 'FORCED ROLLBACK' 또는 'FORCED COMMIT'일 때
SQL> EXEC DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('TRANS_ID');
SQL> COMMIT;

해주고 첫 부분에 있는 쿼리로 확인.




 SQL Deveroper는 Oracle corp.에서 배포하는 Oracle 개발, 관리 등을 지원하는 개발 Tool입니다. Oracle Homepage에서 무료로 받아서 사용할 수 있으며, 현재 안정 버전은 3.0이며 "3.1 Early Adopter" 버전도 받아서 사용할 수 있습니다. 이 글을 작성하던 시점에는 3.0이 최신빌드였는데, 3.1이 정식으로 나왔습니다. (아래의 푸른 글 상자 안의 내용을 추가했습니다. 최신 버전에 대한 정보는 아래의 글 상자 내용을 참조하세요.)

Oracle SQL Developer 3.1 (3.1.07.42)

 February 7, 2012

출처 : http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

To install Oracle SQL Developer 3.1 download the file, there is no in-place upgrade available, you must unzip the file into an empty folder. Select the "Use folder names" checkbox when unzipping the file. You can migrate your settings from Oracle SQL Developer 1.5.x or SQL Developer 2.1.x.. See the Release Notes 3.1 for more details.

JDK Support
Oracle SQL Developer 3.0 is shipped with JDK1.6.0_11. However, you can connect to and use any JDK 1.6.0_11 or above. To use an existing JDK, download the zip files listed below "with JDK already installed."

Use Check for Updates to install:
  • Third-party database drivers for Sybase, SQL Server and MySQL. For more information on setting up the third-party drivers, see Migrations: Getting Started
  • Version control systems, Concurrent Versions System (CVS), Serena Dimensions or Perforce.

Check for Updates also supports an increasing number of Third-Party extensions. These are available with separate licensing agreements and are developed, tested and maintained by third-party vendors.



뒷북이 되어버린... 3.1 Early Adopter 버전입니다.

 
 3.1 버전을 설치했더니, 기본적으로 Oracle과 MS Access에 접근할 수 있게 되어있네요. 추가 설정 작업을 해주면 Microsoft SQL Server, Sybase, IBM DB2에도 접근할 수 있습니다. (Update 메뉴를 통해서 확장 기능을 검색해보면 MySQL, SQL Server 접속 기능도 설치할 수 있는데, 3.1 버전은 아직 정식 버전이 아니라서 그런지 설치를 할 수 없네요.)

 실행하면 화면에 위와 같은 창이 뜨고, 진행막대가 지나갈 겁니다. Java로 되어 있어서 그런지 (Oracle JDeveloper 기반인것 같다. VisualVM(정확한 이름인지는 모르겠다.)으로 상태를 모니터링하면서 보니까 이름이 JDeveloper로 뜨네요.) 초기 기동이 아주 느립니다. 토드와 맞짱 뜰만한 기동 시간이라니... 아 토드 보단 쪼금 빨랐던거 같습니다. 아마도...
  

0. Oracle Database
 Oracle database는 기본적으로 접속이 가능하다. TNS와 IP기반의 접속이 모두 가능하며 쓸만합니다.
 

1. MySQL 접속이 가능하도록 설정하기
1-1. MySQL JDBC Driver 다운로드 받아서 설치하기
  mysql.com의 다운로드 메뉴에서 Connector라는 항목을 선택하면 Connector/J라는 항목이 있다. 여기에서 다운로드 받을 수 있다. 다운로드 받은 파일의 압축을 풀어서 jar file을 원하는 위치에 저장하면 된다.

1-2. SQL Developer에 MySQL JDBC Driver 설정하기
환경설정 메뉴의 "데이터베이스 > 타사 JDBC 드라이버"를 클릭하면 설정 화면이 나옵니다.

1-3. SQL Developer 접속 설정하기
아래 이미지를 보시면 짐작이 가시겠죠? IP 혹은 Hostname, 그리고 계정 정보 등이 필요합니다.


 

2. Microsoft SQL Server에 접속이 가능하도록 설정하기
2-1. SQL Server JTDS Driver 다운로드 받아서 설치하기
  SQL Server는 MS에서 제공하는 JDBC Driver를 사용하면 SQL Developer가 인식하지 못한다. 대신에 Open source로 만들어지는 JTDS Driver를 이용하면 된다. Sourceforge에서 JTDS로 검색하면 찾을 수 있으며, 아래의 "관련 자료 다운로드"의 링크를 따라가면 바로 찾을 수 있다. 다운로드 받은 파일의 압축을 풀어서 jar file을 원하는 위치에 저장하면 된다.
 
2-2. SQL Developer에 JTDS Driver 설정하기
환경설정 메뉴의 "데이터베이스 > 타사 JDBC 드라이버"를 클릭하면 설정 화면이 나옵니다.


2-3. SQL Developer 접속 설정하기
아래의 이미지를 보시면 MySQL과 다른점이 있다면 "Windows 인증 사용"일겁니다. 그외에는 뭐...IP 혹은 Hostname, 계정 정보 등이 필요합니다.




<참고문서>

2. Oracle SQL Developer 3.1 Release Notes


<관련 자료 다운로드>



+ Recent posts