Emacs를 데이터베이스 클라이언트로 사용하기

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

Emacs를 데이터베이스 클라이언트로 사용하기

Emacs에서 데이터베이스 쿼리를 할 수 있으면 좋겠다는 생각이 들었다. 지금까지 찾은 방법은 SQLi를 이용한 방법과 edbi를 사용하는 방법 두 가지다. SQLi는 Emacs 기본 기능을 사용하기 때문에 별도 패키지를 설치하지 않아도 되지만 기능도 기본 수준이다. edbi는 SQLi보다 풍부한 기능을 제공하지만 별도 패키지를 설치해야 하고 cpan으로 RPC::EPC::Service, DBI, 데이터베이스 드라이버 등의 Perl 모듈을 설치해야 한다.

SQLi를 이용한 방법

다음과 같이 하면 데이터베이스에 접속된 *SQL* 버퍼가 생긴다. 여기서 쿼리를 실행할 수 있다.

  1. M-x sql-postgres (PostgreSQL 데이터베이스에 접속하는 경우)
  2. User, Database, Server 입력

그러나 *SQL* 버퍼는 psql을 버퍼에 연결한 것에 불과하기 때문에 여기서 쿼리를 자유롭게 편집하기에는 제약이 있다. .sql버퍼를 따로 열어 SQLi로 연결하면 좀더 자유롭게 쿼리를 편집할 수 있다. 또한 편집한 쿼리를 *SQL* 버퍼로 보내 실행할 수 있다.

  1. .sql 파일을 연 버퍼에서 M-x sql-set-product 실행하고 postgres 입력
  2. M-x sql-set-sqli-buffer 실행 후 커넥션 버퍼 지정 (디폴트는 *SQL*)

이제 .sql 버퍼에서 쿼리 입력 후 sql-send-region명령(C-c C-r)을 통해 쿼리를 실행할 수 있다.

edbi를 이용한 방법

  1. 패키지 매니저(M-x list-package)에 들어가 edbi를 설치한다.
  2. cpan으로 RPC::EPC::Service, DBI, 데이터베이스 드라이버 등의 Perl 모듈을 설치한다. EPC 모듈뿐 아니라 SQLite, PostgreSQL, MySQL 데이터베이스 드라이버가 함께 설치된다.
    $ cpan RPC::EPC::Service DBI DBD::SQLite DBD::Pg DBD::mysql
  3. M-x edbi:open-db-viewer를 실행한다.
  4. 설정창에서 Data Source, User Name, Auth 항목을 입력한 후 [OK]를 선택한다. 연결 설정 정보는 History에 저장되어 나중에 불러쓸 수 있다. DB 설정
  5. 데이터베이스에 접속되면 테이블 목록이 표시된다. RET키를 누르면 테이블 데이터가 표시되고, c를 누르면 쿼리 편집 버퍼로 이동한다. j, k 또는 n, p로 행을 이동할 수 있다. DB 클라이언트로 사용 예

결론

잘 모르는 Perl 모듈이 왕창 깔리는 부담이 있지만, 사용성은 edbi가 훨씬 좋은 듯 하다.

참고