PostgreSQL | psql을 사용하여 PostgreSQL에 연결 | psql 옵션 사용법과 옵션 목록

psql을 실행할 때에 연결에 사용하는 사용자명 및 데이터베이스를 지정하는 옵션 이외에도 몇 가지 옵션을 제공한다. 여기에서 psql을 실행할 때 지정할 수 있는 옵션의 사용법과 옵션의 목록에 대해 설명한다.

psql을 실행할 때에 자주 사용하는 옵션은 PostgreSQL에 연결할 때 사용하는 -h와 -U 옵션이지만, 그외 몇 가지 옵션을 제공하고 있다.

버전 확인

-V 옵션은 PostgreSQL 버전을 표시할 수 있다.

psql -V
C:\>psql -V
psql (PostgreSQL) 12.2

C:\>

옵션 목록 및 도움말 표시

-? 옵션 목록 및 도움말을 표시하는 옵션이다.

C:\>psql -?
psql은 PostgreSQL 대화식 터미널입니다.

사용법:
  psql [OPTION]... [DBNAME [USERNAME]]

일반 옵션:
  -c, --command=COMMAND    하나의 명령(SQL 또는 내부 명령)만 실행하고 끝냄
  -d, --dbname=DBNAME      연결할 데이터베이스 이름(기본 값: "devkuma")
  -f, --file=FILENAME      파일 안에 지정한 명령을 실행하고 끝냄
  -l, --list               사용 가능한 데이터베이스 목록을 표시하고 끝냄
  -v, --set=, --variable=NAME=VALUE
                           psql 변수 NAME을 VALUE로 설정
                           (예, -v ON_ERROR_STOP=1)
  -V, --version            버전 정보를 보여주고 마침
  -X, --no-psqlrc          시작 파일(~/.psqlrc)을 읽지 않음
  -1 ("one"), --single-transaction
                           명령 파일을 하나의 트랜잭션으로 실행
  -?, --help[=options]     이 도움말을 표시하고 종료
      --help=commands      psql 내장명령어(\문자로 시작하는)를 표시하고 종료
      --help=variables     특별 변수들 보여주고, 종료

입출력 옵션:
  -a, --echo-all           스크립트의 모든 입력 표시
  -b, --echo-errors        실패한 명령들 출력
  -e, --echo-queries       서버로 보낸 명령 표시
  -E, --echo-hidden        내부 명령이 생성하는 쿼리 표시
  -L, --log-file=FILENAME  세션 로그를 파일로 보냄
  -n, --no-readline        확장된 명령행 편집 기능을 사용중지함(readline)
  -o, --output=FILENAME    쿼리 결과를 파일(또는 |파이프)로 보냄
  -q, --quiet              자동 실행(메시지 없이 쿼리 결과만 표시)
  -s, --single-step        단독 순차 모드(각 쿼리 확인)
  -S, --single-line        한 줄 모드(줄 끝에서 SQL 명령이 종료됨)

출력 형식 옵션:
  -A, --no-align           정렬되지 않은 표 형태의 출력 모드
      --csv                CSV (쉼표-분리 자료) 테이블 출력 모드
  -F, --field-separator=STRING
                           unaligned 출력용 필드 구분자 설정(기본 값: "|")
  -H, --html               HTML 표 형태 출력 모드
  -P, --pset=VAR[=ARG]     인쇄 옵션 VAR을 ARG로 설정(\pset 명령 참조)
  -R, --record-separator=STRING
                           unaligned 출력용 레코드 구분자 설정
                           (기본 값: 줄바꿈 문자)
  -t, --tuples-only        행만 인쇄
  -T, --table-attr=TEXT    HTML table 태그 속성 설정(예: width, border)
  -x, --expanded           확장된 표 형태로 출력
  -z, --field-separator-zero
                           unaligned 출력용 필드 구분자를 0 바이트로 지정
  -0, --record-separator-zero
                           unaligned 출력용 레코드 구분자를 0 바이트로 지정

연결 옵션들:
  -h, --host=HOSTNAME      데이터베이스 서버 호스트 또는 소켓 디렉터리
                           (기본값: "로컬 소켓")
  -p, --port=PORT          데이터베이스 서버 포트(기본 값: "5432")
  -U, --username=USERNAME  데이터베이스 사용자 이름(기본 값: "devkuma")
  -w, --no-password        암호 프롬프트 표시 안 함
  -W, --password           암호 입력 프롬프트 보임(자동으로 처리함)

자세한 내용을 보려면 psql 내에서 "\?"(내부 명령) 또는 "\help"(SQL
명령)를 입력하거나 PostgreSQL
설명서에서 psql 섹션을 참조하십시오.

오류보고: <pgsql-bugs@lists.postgresql.org>.

C:\>

결과 표시 방법을 HTML 테이블 태그 사용하도록 지정

psql을 사용하여 PostgreSQL에 접속한 뒤의 표시 방법에 관한 것도 있다. 예를 들면, PostgreSQL에 접속한 후에 데이터베이스를 목록을 표시하면 다음과 같이 표시된다.

C:\>psql -U postgres
postgres 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(3개 행)


postgres=#

-H 옵션을 사용하면 psql을 실행 PostgreSQL에 접속하면 동일한 데이터베이스 목록을 검색하면 HTML 테이블 태그를 사용하여 형식으로 출력할 수도 있다.

C:\>psql -H -U postgres
postgres 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=# \l
<table border="1">
  <caption>데이터베이스 목록</caption>
  <tr>
    <th align="center">이름</th>
    <th align="center">소유주</th>
    <th align="center">인코딩</th>
    <th align="center">Collate</th>
    <th align="center">Ctype</th>
    <th align="center">액세스 권한</th>
  </tr>
  <tr valign="top">
    <td align="left">postgres</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">&nbsp; </td>
  </tr>
  <tr valign="top">
    <td align="left">template0</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">=c/postgres<br />
postgres=CTc/postgres</td>
  </tr>
  <tr valign="top">
    <td align="left">template1</td>
    <td align="left">postgres</td>
    <td align="left">UTF8</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">Korean_Korea.949</td>
    <td align="left">=c/postgres<br />
postgres=CTc/postgres</td>
  </tr>
</table>
<p>(3개 행)<br />
</p>

postgres=#

여기서 언급한 데이터베이스 목록을 검색뿐 아니라, 다른 검색도 HTML 형태로 테이블 태그를 사용하여 형식으로 출력이 된다.

postgres=# select now()
postgres-# ;
<table border="1">
  <tr>
    <th align="center">now</th>
  </tr>
  <tr valign="top">
    <td align="left">2020-03-15 02:30:16.292241+09</td>
  </tr>
</table>
<p>(1개 행)<br />
</p>

postgres=#

파일을 이용한 SQL 실행

-f 옵션을 사용하면 파일을 이용해서 SQL를 실행 시킬 수도 있다.

먼저 아래와 같이 SQL 파일을 작성한다.

D:\>copy con file.sql
select now();^Z
        1개 파일이 복사되었습니다.

작성한 파일을 아래와 같이 실행시키면 출력 결과를 볼 수 있다.

D:\>psql -U postgres -f file.sql
postgres 사용자의 암호:
              now
-------------------------------
 2020-03-15 02:39:17.327284+09
(1개 행)



D:\>

이와 같이 psql의 옵션에는 여러가지 기능을 제공하고 있기에, 나중에 옵션 목록을 확인하여 무엇을 할 수 있는지를 확인해 두면 유용하게 사용할 수 있을 것이다.