HOWTO · PostgreSQL

PSQL에서 PostgreSQL 쿼리 실행

이 문서에서는 PostgreSQL 명령줄 도구에서 쿼리를 실행하는 방법을 설명합니다.

이 페이지의 내용

psql은 PostgreSQL의 터미널 클라이언트로, SQL을 대화형으로 실행하거나 선택한 데이터베이스에 쿼리를 보내거나 .sql 파일의 문을 실행할 수 있습니다. pgAdmin과 달리 psql은 터미널에서 실행되며 SQL 문과 자체 백슬래시 명령을 모두 받습니다. 아래 예제는 PostgreSQL 서버에 연결할 수 있고 선택한 데이터베이스에 연결할 권한이 있는 역할을 사용한다고 가정합니다.

대화형 psql 세션에서 SQL 문 실행하기

psql -U postgres -d postgres로 대화형 세션을 시작합니다. postgres는 설치 환경에서 사용할 수 있는 역할과 데이터베이스 이름으로 바꾸세요. 프롬프트에서 SQL 문을 입력하고 세미콜론으로 끝냅니다. 다음 임시 테이블 예제는 같은 세션에서 반복해 실행할 수 있습니다. 두 행을 삽입하기 전에 세션에만 존재하는 예제 테이블을 비우므로, 실행할 때마다 같은 결과가 표시됩니다.

CREATE TEMP TABLE IF NOT EXISTS bag (id integer PRIMARY KEY, model text NOT NULL);

TRUNCATE bag;

INSERT INTO bag (id, model) VALUES (1, 'Adidas'), (2, 'Jale') ON CONFLICT (id) DO UPDATE SET model = EXCLUDED.model;

SELECT id, model FROM bag ORDER BY id;

SELECT는 다음 열과 행을 반환합니다.

id model
1 Adidas
2 Jale

대화형 세션에서 Enter를 누르면 다음 입력 줄로 이동할 뿐, SQL 문이 끝나지는 않습니다. 문 끝에 세미콜론이 없으면 psql은 입력을 계속 받으며, 보통 이어쓰기 프롬프트를 표시합니다. 문을 완료하려면 세미콜론을 추가하세요. 잘못된 문을 시작했다면 \r로 쿼리 버퍼를 비우고 다시 시작할 수 있습니다. 첫 문을 끝내기 전에 실수로 다른 명령을 이어 입력하면 psql은 입력 전체를 하나의 SQL 문으로 처리하므로 구문 오류가 발생할 수 있습니다.

대상 데이터베이스에 연결하고 쿼리 실행하기

역할에 표시되는 데이터베이스를 \l 또는 \l+로 나열할 수 있습니다. (\l+는 추가 세부 정보도 표시합니다.) PostgreSQL 카탈로그에서 SELECT datname FROM pg_database ORDER BY datname;를 실행해 확인하는 방법도 있습니다. 카탈로그에는 데이터베이스가 나열되지만, 해당 역할이 데이터베이스에 연결할 수 있는지는 권한과 서버 설정에 따라 달라집니다.

psql 안에서 \c postgres를 실행해 데이터베이스에 연결하세요. postgres는 대상 데이터베이스 이름으로 바꾸면 됩니다. \dt는 현재 검색 경로에 있는 테이블을 나열합니다. 다른 관계 유형을 확인하려면 \d를 사용하세요. 이 명령은 뷰, 시퀀스 및 지원되는 다른 관계 유형도 나열합니다. 시작할 때 데이터베이스에 연결하려면 -d 옵션을 사용합니다. 예: psql -U postgres -d postgres.

-c 옵션으로 쿼리를 전달할 수도 있습니다. 예: psql -U postgres -d postgres -c "SELECT datname FROM pg_database ORDER BY datname;". 이 카탈로그 쿼리는 새 psql 세션에서도 실행되며 앞서 만든 테이블에 의존하지 않습니다. 셸마다 인용 규칙이 다릅니다. POSIX 호환 셸에서 큰따옴표는 SQL을 하나의 명령줄 인수로 묶는 셸 구문이며, SQL의 따옴표가 아닙니다. 쿼리에 SQL 문자열 리터럴이 있다면 셸은 큰따옴표로 묶인 인수 안의 작은따옴표를 그대로 전달합니다. PowerShell이나 명령 프롬프트에서는 인용 및 이스케이프 규칙이 다를 수 있으므로 해당 셸에 맞게 명령을 조정하세요. 세미콜론은 SQL 문을 끝내지만, -c로 단일 문을 전달할 때 마지막 세미콜론은 생략할 수 있습니다.

한 줄 입력 모드로 한 줄 쿼리 실행하기

-S 또는 --single-line 옵션을 지정해 psql을 시작하면 한 줄 입력 모드를 사용할 수 있습니다. 예: psql -U postgres -d postgres -S. 이 모드에서는 줄바꿈을 입력하면 현재 입력 줄이 쿼리로 제출되므로, 한 줄에 SQL 문 하나를 입력하세요. 예를 들어 SELECT datname FROM pg_database ORDER BY datname을 입력한 다음 Enter를 누릅니다. 이 모드는 한 줄 입력을 위한 것입니다. 여러 줄에 걸친 SQL 문에는 일반 대화형 모드를 사용하고 세미콜론으로 문을 끝내세요.

psql로 파일의 SQL 실행하기

클라이언트를 시작할 때 SQL 파일을 실행하려면 psql -U postgres -d postgres -f "/path/to/query.sql"을 사용하세요. 자리표시자를 실제 파일 경로로 바꾸면 됩니다. 공백이 포함된 경로는 셸의 규칙에 따라 따옴표로 묶으세요. 경로 구분자도 운영 체제와 셸에 따라 다릅니다.

이미 대화형 세션을 시작한 상태라면 \i '/path/to/query.sql'로 같은 파일을 실행할 수 있습니다. 파일은 psql이 실행되는 환경에서 읽을 수 있어야 합니다. 두 방법 모두 선택한 데이터베이스로 파일의 SQL을 보내므로, 데이터를 변경하는 문을 실행하기 전에 데이터베이스와 역할을 확인하세요.