psql 가동: PostgreSQL 메타 명령어 필수 가이드

스키마 검사, 출력 형식 지정, 데이터베이스 전환, 터미널에서 더 빠르게 작업하는 데 도움이 되는 psql 메타 명령어를 알아보세요.

psql 강화: PostgreSQL 메타 명령어 필수 가이드

터미널에서 PostgreSQL로 작업할 때 psql 메타 명령어는 일상적인 확인을 위해 카탈로그 쿼리를 작성하지 않아도 되게 해줍니다. 이러한 백슬래시 명령어는 세션을 종료하지 않고 테이블 나열, 객체 설명, 데이터베이스 전환, 출력 형식 지정, 도움말 보기를 도와줍니다.

이 가이드는 가장 자주 사용하는 psql 명령어를 다루고 실제 데이터베이스 작업에서 어떻게 활용되는지 보여줍니다.

psql 메타 명령어 이해하기

psql의 메타 명령어는 PostgreSQL 서버로 전송되어 실행되는 것이 아니라 psql 자체에서 처리되는 지시문입니다. 앞에 붙은 백슬래시(\)로 쉽게 식별할 수 있습니다. 이 구분은 메타 명령어가 표준 SQL과는 다른 고유한 구문과 동작을 가지기 때문에 중요합니다.

예를 들어, 모든 테이블을 나열하기 위해 SELECT * FROM information_schema.tables;를 작성할 수도 있지만, psql 메타 명령어는 간단한 \dt로 동일한 결과를 얻을 수 있습니다.

데이터베이스 검사를 위한 필수 메타 명령어

데이터베이스 구조를 검사하는 것은 빈번한 작업입니다. psql은 이 과정을 쉽게 만들어주는 여러 메타 명령어를 제공합니다.

테이블 나열 (\dt)

\dt 명령어는 가장 자주 사용되는 메타 명령어 중 하나입니다. 현재 데이터베이스의 모든 테이블을 스키마와 소유자와 함께 나열합니다.

  • 예시:

    \dt
    
  • 출력:

                           List of relations
    Schema |    Name    | Type  |  Owner   
    --------+------------+-------+----------
    public | accounts   | table | postgres 
    public | products   | table | postgres 
    sales  | orders     | table | dbadmin  
    (3 rows)
    
  • 변형:

    • \dt+: 테이블 크기와 설명을 포함한 더 자세한 정보를 제공합니다.
    • \dt schema.*: 특정 스키마의 테이블만 나열합니다.

테이블 및 컬럼 설명 (\d)

\d 명령어는 특정 테이블의 구조(컬럼, 데이터 타입, 제약 조건, 인덱스 포함)를 이해하는 데 매우 유용합니다.

  • 예시: products 테이블을 설명하려면:

    \d products
    
  • 출력:

                                   Table "public.products"
     Column   |         Type          | Collation | Nullable | Default 
    ----------+-----------------------+-----------+----------+---------
     product_id | integer             |           | not null | 
     name       | character varying(100)|           |          | 
     price      | numeric(10, 2)        |           |          | 
    Indexes:
        "products_pkey" PRIMARY KEY, btree (product_id)
    
  • 변형:

    • \d+ table_name: 스토리지 매개변수와 주석을 포함한 더 상세한 정보를 제공합니다.
    • \dn: 모든 스키마를 나열합니다.
    • \df: 모든 함수를 나열합니다.
    • \dv: 모든 뷰를 나열합니다.

뷰 검사 (\dv)

테이블과 유사하게 뷰를 나열하고 설명할 수 있습니다.

  • 예시 (뷰 나열):

    \dv
    
  • 예시 (뷰 설명):

    \dv my_view
    

스키마 나열 (\dn)

데이터베이스에 있는 모든 스키마를 보려면 \dn 명령어를 사용하세요.

  • 예시:
    \dn
    

쿼리 관리 및 출력 제어를 위한 메타 명령어

psql은 쿼리 결과가 표시되는 방식을 제어하고 쿼리 기록을 관리하기 위한 강력한 옵션을 제공합니다.

쿼리 타이밍 (\timing)

\timing 명령어는 각 SQL 쿼리의 경과 시간 표시를 전환합니다. 쿼리 튜닝 중 빠른 비교에 유용하지만, 실제 실행 계획이 필요할 때는 EXPLAIN (ANALYZE, BUFFERS)를 사용해야 합니다.

  • 예시 (타이밍 켜기):

    \timing on
    

    이제 실행하는 모든 쿼리 뒤에 실행 시간이 표시됩니다.

  • 예시 (타이밍 끄기):

    \timing off
    

출력 형식 지정 (\a, \H, \t)

  • \a: 정렬(테이블) 출력과 비정렬(CSV 유사) 출력 간 전환합니다. 비정렬 출력은 프로그래밍 방식으로 구문 분석하기 더 쉬운 경우가 많습니다.

    \a
    SELECT * FROM products;
    
  • \H: 출력 형식을 HTML로 전환합니다.

    \H
    SELECT * FROM products;
    
  • \t: 컬럼 헤더와 행 개수 바닥글 표시를 전환합니다. 다른 명령어로 파이프하기 쉬운 출력을 원할 때 유용합니다.

    \t
    SELECT name, price FROM products;
    

페이징 (\pset pager)

쿼리 결과가 길면 psql은 환경 및 페이저 설정에 따라 less와 같은 페이저를 사용할 수 있습니다. \pset pager로 해당 동작을 제어하세요.

  • 예시 (긴 출력에 페이저 사용):

    \pset pager on
    
  • 예시 (페이저 비활성화):

    \pset pager off
    

관리 메타 명령어

검사 및 출력 제어 외에도 psql은 일반적인 관리 작업을 위한 명령어를 제공합니다.

데이터베이스 나열 (\l)

연결된 PostgreSQL 서버에서 사용 가능한 모든 데이터베이스를 보려면 \l을 사용하세요.

  • 예시:
    \l
    

다른 데이터베이스에 연결 (\c)

이미 psql 세션에 연결되어 있고 다른 데이터베이스로 전환하려면 \c 명령어를 사용하세요.

  • 예시: mydatabase 데이터베이스에 연결하려면:
    \c mydatabase
    

도움말 보기 (\?)

의문이 있을 때 psql은 자체 도움말 시스템을 제공합니다. \? 명령어는 사용 가능한 모든 메타 명령어를 나열하고, \!는 셸 명령어를 실행할 수 있게 합니다.

  • 예시 (모든 메타 명령어 나열):

    \?
    
  • 예시 (셸 명령어 실행, 예: ls):

    \! ls -l
    

모범 사례 및 팁

  • 전체 psql 명령어에 셸 별칭 사용: 셸 별칭은 이미 열린 psql 세션 내에서 \dt를 실행할 수 없지만, 일반적인 시작 명령어를 단축할 수 있습니다. 예: alias pprod='psql "postgresql://[email protected]/prod"'.
  • SQL과 결합: 메타 명령어는 SQL과 상호 배타적이지 않습니다. SELECT 문을 작성하기 전에 스키마를 빠르게 검사하거나 \timing을 사용하여 쿼리 실행 시간을 비교하는 데 사용할 수 있습니다.
  • 범위 이해: 메타 명령어는 현재 psql 세션 및 연결 컨텍스트 내에서 작동합니다. \c와 같은 명령어는 해당 세션의 활성 데이터베이스를 변경합니다.
  • \?를 자주 사용: 내장 도움말은 포괄적이며 명령어를 기억하거나 새로운 명령어를 발견해야 할 때 훌륭한 리소스입니다.

핵심 요약

\dt, \d, \dn, \l, \c, \timing, \pset pager, \?부터 시작하세요. 이 몇 가지 명령어만으로도 대부분의 일상적인 검사 작업을 처리할 수 있으며 psql을 원시 SQL 프롬프트처럼 느끼지 않게 해줍니다.