Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] psql

[OpenSQL] psql

psql 개요

psql 이란?

psql is a terminal-based front-end to PostgreSQL
– PostgreSQL 공식 문서 –

  • PostgreSQL 공식 문서 –

psql은 PostgreSQL에 대한 터미널 기반 프론트 엔드입니다. PostgreSQL 데이터베이스에 연결하여 대화식으로 쿼리를 입력하여 보낸 후, 쿼리 결과를 볼 수 있습니다. 스크립트를 작성하고 다양한 작업을 자동화할 수 있도록 많은 **메타 명령어(meta-commands)**와 shell-like 기능을 제공합니다.

psql 문법

psql[ option…] [ dbname[ username]]

psql 옵션

옵션설명
-a, –echo-all모든 입력 라인을 읽을 때 표준 출력으로 출력합니다.
-A, –no-align정렬되지 않은 출력 모드로 전환합니다. 기본 출력 모드는 aligned입니다.
(=pset format unaligned)
-b, –echo-errors실패한 SQL명령을 표준 오류 출력으로 출력합니다.
-c command, –command=commandpsql이 주어진 명령 문자열을 실행하도록 지정합니다. 옵션 내에서 SQL 및 psql 메타 명령을 혼합할 수 없습니다.
–csvcsv(쉼표로 구분된 값)출력 모드로 전환합니다. (=pset
format csv)
-d dbname,–dbname=dbname연결할 데이터베이스 이름을 지정합니다. dbname은 첫번째 인수로 지정하는 것과 같습니다.
-e, –echo-queries서버로 전송된 모든 SQL명령도 표준 출력으로 복사합니다.
-E, –echo-hiddend및 기타 백슬래시 명령에 의해 생성된 실제 쿼리를 표시합니다.
-f filename, –file=filename표준 입력이 아닌 파일에서 명령을 읽습니다. (=i)
-F separator, –field-separator=separatorUnaligned 출력의 구분자로 separator을 사용합니다. pset fieldsep 또는 f과 동일합니다.
-h hostname, –host=hostname서버가 실행 중인 시스템의 호스트 이름을 지정합니다. ‘/’로 시작하면 Unix 도메인 소켓의 디렉토리로 사용됩니다.
-H, –htmlHTML 출력 모드로 전환합니다. (=pset format html,H)
-l, –list사용 가능한 모든 데이터베이스를 나열한 다음 종료합니다.
(=list)
-L filename, –log-file=filename일반 출력 대상 외에 모든 쿼리 출력을 file에 씁니다.
-n, –no-readlineReadline을 사용하지 말고 command history를 사용하지 않습니다.
-o filename, –output=filename모든 쿼리 출력을 file에 넣습니다. (=o)
-p port, –port=port서버가 연결을 수신하는 TCP 포트 또는 로컬 Unix 도메인 소켓 파일 확장자를 지정합니다. 기본 값은 PGPORT 환경 변수 값으로 설정되거나 기본 5432로 설정됩니다.
-P assignment, –pset=assignment인쇄 옵션을 pset의 스타일로 지정합니다. (예:-P format=latex)
-q,–quiet환영 메세지나 다양한 정보 출력 없이 작업을 수행하도록 지정합니다.
-R separator, –record-separator=separatorUnaligned 출력에 대한 구분 기호로 separator을 사용합니다. (=pset recordsep)
-s, –single-step서버로 전송되기 전에 취소할 수 있는 단일 단계 모드가 실행됩니다.
-S, –single-line행 바꿈이 SQL 명령을 종료하는 단일 행 모드가 실행됩니다.
-t, –tuples-only컬럼 이름 및 결과 행 수 등의 출력을 끕니다. (=pset tuples_only,t)
-T table_options,–table-attr=table_optionsHTML table 태그 내에 배치할 옵션을 지정합니다.
-U username,–username=username기본 값 대신 username으로 데이터베이스에 연결 합니다.
-v assignment,–set=assignment,–variable=assignmentset 메타 명령과 같은 변수 할당을 수행합니다.
-V, –versionPsql버전을 인쇄하고 종료합니다.
-w, –no-password암호 프롬프트를 출력하지 않습니다. (.pgpass파일과 같은 다른 곳에서 암호를 사용할 수 없는 경우에는 연결 시도가 실패합니다.)
-W, –password암호가 사용되지 않더라도 psql이 데이터베이스에 연결하기 전에 암호를 묻도록 합니다.
-x, –expandedExpanded table format 모드를 켭니다. (=x, pset expanded)
-X, –no-psqlrcStart-up 파일을 읽지 않습니다. (psqlrc 파일과 유저의 ~/.psqlrc 파일포함)
-z, –field-separator-zeroUnaligned 출력의 필드 구분 기호를 0바이트로 설정합니다. (=pset fieldsep_zero)
-0, –record-separator-zeroUnaligned 출력의 레코드 구분 기호를 0바이트로 설정합니다. (=pset recordsep_zero)
-1, –single-transactionPsql이 첫번째 옵션보다 BEGIN을 실행하고 마지막 옵션보다 나중에 COMMIT을 실행하여 모든 명령을 단일 트랜잭션으로 래핑합니다.

psql 기본 사용법

데이터베이스에 연결하기

psql은 PostgreSQL 클라이언트 애플리케이션입니다. 데이터베이스에 연결하려면 다음 정보를 알아야하며 각 옵션( -d, -h, -p -U) 을 통해 매개변수에 대해 알릴 수 있습니다.

  1. 대상 데이터베이스의 이름 (-d)
  2. 서버의 호스트 이름 (-h)
  3. 포트 번호 (-p)
  4. 연결하려는 사용자 이름 (-U)

호스트 이름을 생략하면 psql 은 Unix 도메인 소켓을 통해 로컬 호스트 서버에 연결합니다.
정기적으로 암호를 입력해야 하는 것을 피하기 위해 .pgpass 파일이 있으면 편리하게 데이터베이스에 연결할 수 있습니다.

접속 방법

[opensql@localhost:~]$ psql -d postgres -h localhost -p 5432 -U postgres
psql (14.2)
Type “help” for help.

postgres=#

SQL Commands 입력하기

psql은 현재 연결되어 있는 데이터베이스의 이름과 함께 프롬프트를 제공합니다. 프롬프트에서 사용자는 SQL Commands를 입력할 수 있습니다. 일반적으로 세미콜론(;)에 도달하면 입력 라인이 서버로 전송됩니다. 오류없이 실행되면 결과가 화면에 표시됩니다.

psql (14.2)
Type “help” for help.

postgres=#

메타 명령(Meta-Commands) 사용 하기

psql에 입력하는 백슬래시로 시작하는 모든 명령어는 psql에서 자체 처리되는 메타 명령어 입니다.
메타 명령어에 대한 자세한 설명은 여기 를 참고해주세요!

psql 부가 기능

변수 대체 기능

psql은 일반적인 Unix Commands Shell과 유사한 변수 대체 기능을 제공합니다. 변수는 name/value 쌍으로 이루어지며, value는 임의의 길이의 문자열입니다.

변수 설정

  • 변수를 설정하려면 set 메타 명령어를 사용하고, 변수의 값을 검색하려면 변수 앞에 콜론(:)을 추가합니다.

postgres=# set foo bar
postgres=# echo :foo

변수 설정 해제

  • 변수를 설정 해제 (즉, 삭제) 하려면 unset 명령어를 사용합니다.

postgres=# unset foo
postgres=# echo :foo

set을 인수 없이 호출하면 모든 변수의 값을 출력합니다.

postgres=# set
AUTOCOMMIT = ‘on’
COMP_KEYWORD_CASE = ‘preserve-upper’
DBNAME = ‘postgres’
ECHO = ‘none’
ECHO_HIDDEN = ‘off’
ENCODING = ‘UTF8’
FETCH_COUNT = ‘0’
HIDE_TABLEAM = ‘off’
HIDE_TOAST_COMPRESSION = ‘off’
HISTCONTROL = ‘none’
HISTSIZE = ‘500’
HOST = ‘/var/run/opensql’
IGNOREEOF = ‘0’
LAST_ERROR_MESSAGE = ”
LAST_ERROR_SQLSTATE = ‘00000’
ON_ERROR_ROLLBACK = ‘off’
ON_ERROR_STOP = ‘off’
PORT = ‘5432’
PROMPT1 = ‘%/%R%x%# ‘
PROMPT2 = ‘%/%R%x%# ‘
PROMPT3 = ‘>> ‘
QUIET = ‘off’
SERVER_VERSION_NAME = ‘14.2’
SERVER_VERSION_NUM = ‘140002’
SHOW_CONTEXT = ‘errors’
SINGLELINE = ‘off’
SINGLESTEP = ‘off’
USER = ‘postgres’
VERBOSITY = ‘default’
VERSION = ‘PostgreSQL 14.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit’
VERSION_NAME = ‘14.2’
VERSION_NUM = ‘140002’

pset을 인수 없이 호출하면 쿼리 결과 테이블의 출력에 영향을 미치는 변수를 출력합니다.

postgres=# pset
border 1
columns 0
csv_fieldsep ‘,’
expanded off
fieldsep ‘|’
fieldsep_zero off
footer on
format aligned
linestyle ascii
null ”
numericlocale off
pager 1
pager_min_lines 0
recordsep ‘n’
recordsep_zero off
tableattr
title
tuples_only off
unicode_border_linestyle single
unicode_column_linestyle single
unicode_header_linestyle single

프롬프트 설정

psql 프롬프트는 변수 PROMPT1PROMPT2및 PROMPT3 값을 통해 사용자가 변경할 수 있습니다.
변수 PROMPT1PROMPT2및 PROMPT3에는 프롬프트의 모양을 설명하는 문자열과 특수 이스케이프 시퀀스가 포함되어 있습니다.

변수 명설명
PROMPT1psql이 새 명령을 요청할 때 출력 되는 일반 프롬프트
PROMPT2명령이 세미콜론으로 종료되지 않아서 더 많은 입력이 예상될 때 출력 되는 프롬프트
PROMPT3COPY FROM STDIN 명령을 실행하고 터미널에 값을 입력 해야 될 때 출력 되는 프롬프트선택한 프롬프트 변수의 값은 퍼센트 기호(%)가 있는 경우를 제외하고 문자 그대로 인쇄됩니다.

설정 예시

postgres=# set PROMPT1 ‘%[%033[1;34;40m%]%n@%/%R%#’

%[…%]텍스트의 색상, 배경 또는 스타일을 변경 하는 등 터미널 제어 문자를 포함할 수 있습니다.
%033VT100 호환 지원되기 때문에 숫자로 스타일을 변경합니다.
%n데이터베이스 세션 사용자의 이름입니다.
%/현재 데이터베이스의 이름입니다. 
%R프롬프트1에서는 보통 ‘=‘ 으로 쓰입니다. 
%#세션 사용자가 슈퍼유저이면 ‘#’, 그렇지 않으면 ‘>’ 로 쓰입니다.

위 커맨드로 프롬프트를 변경하면 파란색 프롬프트로 변경된 것을 확인할 수 있습니다.

커맨드 라인 (command-line) 편집

  • 편리한 편집 및 검색을 위해 Readline 라이브러리를 지원합니다. command history 는 psql이 종료될 때 자동으로 저장되고 시작될 때 다시 로드 됩니다. **탭 완성 기능(Tap-completion)**도 지원합니다.

psql 환경변수

다음 환경변수들과 같이 psql을 사용할 수 있습니다.

환경변수설명
COLUMNSpset coulumn이 0이면 형식의 너비를 제어합니다.
PGHOSThost 연결 매개변수와 동일하게 동작합니다.
PGPORTport 연결 매개변수와 동일하게 동작합니다.
PGDATABASEdbname 연결 매개변수와 동일하게 동작합니다.
PGUSERuser 연결 매개변수와 동일하게 동작합니다.
PG_COLOR진단 메세지에 색상을 사용할지 여부를 지정합니다. 가능한 값은 always, auto 및 never 입니다.
PSQL_EDITOR
EDITOR
VISUALe, ef 및 ev 명령에서 사용되는 편집기입니다. 설정된 항목이 없는 경우 기본적으로 유닉스 시스템에서는 vi, 윈도우에서는 메모장을 사용합니다.
PSQL_EDITOR_LINENUMBER_ARGe, ef 또는 ev가 줄 번호 인수와 함께 사용되는 경우, 사용자의 편집기에 지정한 명령줄 인수를 전달합니다.
PSQL_HISTORY명령 기록 파일의 위치입니다.
PSQL_PAGER
PAGER기본 호출기 프로그램을 설정하는 데 사용되는 환경 변수입니다.쿼리 결과가 화면에 맞지 않으면 이 명령을 통해 연결됩니다. 페이지가 매겨진 형식으로 쿼리 결과를 표시하는 데 사용되므로 보다 관리하기 쉬운 방식으로 많은 양의 데이터를 볼 수 있습니다.
PSQL_WATCH_PAGERwatch명령 에서 사용하는 호출기 프로그램을 설정할 수 있는 환경 변수입니다 .
PSQLRC.psqlrc 사용자 파일의 위치입니다.
SHELL! 명령에 의해 실행되는 명령입니다.
TMPDIR임시 파일을 저장하기 위한 디렉토리입니다. 기본값은 /tmp입니다.

그리고 대부분의 다른 PostgreSQL의 유틸리티와 마찬가지로 libpq에서 지원하는 환경변수를 사용합니다. libpq에서 지원하는 환경변수에 대한 내용은 여기 를 참고해주세요!!

사용 방법

export PGHOME=/opensql/pg #opensql engine directory
export PGDATA=/opensql/pg/$PGVERSION/data #opensql database clsuter directory
export PGHOST=/var/run/opensql #opensql socket directory
export PGUSER=postgres #opensql Basic DB User Name
export PGPASSFILE=’/opensql/.pgpass’ #opensql pgpass file

환경변수를 사용하면 다음과 같이 psql 커맨드를 사용할 수 있습니다.

[opensql@localhost:~]$ psql
psql (14.2)
Type “help” for help.

지금까지 ’PostgreSQL에 대한 터미널 기반 프론트 엔드 ‘psql’에 관해 알아보았습니다
‘PostgreSQL initdb’을 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •