PSQL에서 PostgreSQL 쿼리 실행

Bilal Shahid 2024년2월15일
  1. PSQL 활용의 기본 방법론
  2. 각 데이터베이스에 대해 개별적으로 쿼리 실행
  3. 세미콜론 대신 SINGLE LINE 구문 사용
  4. PSQL에서 SQL 쿼리를 읽기 위해 파일 사용
PSQL에서 PostgreSQL 쿼리 실행

PostgreSQL에는 두 가지 옵션이 있습니다. 첫 번째 옵션은 PGADMIN4 또는 사용할 다른 버전 번호이고 두 번째 옵션은 PSQL입니다. PSQL은 PostgreSQL 세션과 상호 작용하고 사용자 인터페이스에서 쿼리를 실행할 수 있는 명령줄 인터페이스입니다.

PSQL은 터미널 기반 프런트 엔드이며 파일과 해당 명령줄에서 인수와 쿼리를 가져올 수도 있습니다. 이제 PostgreSQL 명령줄인 PSQL에서 쿼리가 작동하는 방식을 이해하겠습니다.

PSQL 활용의 기본 방법론

Postgres 사용자 이름과 암호를 사용하여 PSQL을 부팅하고 성공적으로 로그인했으면 명령줄의 PostgreSQL 사용자 인터페이스에서 실행할 쿼리를 실행하는 방법을 이해할 차례입니다.

원치 않는 오류를 방지하려면 SELECT, INSERT, UPDATE 등과 같은 키워드와 함께 쿼리를 사용할 때 구문을 올바르게 따라야 합니다. 많은 사람들이 세미콜론 ;을 놓치는 경향이 있습니다.

세미콜론이 없으면 PSQL은 쿼리가 아직 종료되지 않았다고 생각하고 ENTER를 눌러도 확실하지 않습니다. 따라서 다음과 같이 PSQL 인스턴스에 있다고 가정해 보겠습니다.

PSQL 명령줄 인터페이스

이제 테이블을 데이터베이스에 삽입하십시오. 우리는 IDMODEL이라는 두 개의 열이 있는 BAG 테이블을 INSERT하려고 합니다.

질문:

CREATE table BAG (id INT, model TEXT);

출력:

데이터베이스에 테이블 삽입

세미콜론을 입력하는 것을 잊고 ENTER를 누르면 화면에 출력되지 않고 공백으로 남게 됩니다.

출력:

데이터베이스에 테이블 생성 오류

같은 방식으로 INSERT 쿼리를 실행하여 이제 다음과 같이 일부 값을 입력할 수 있습니다. 데이터 세트 ‘(1, Adidas)’, ‘(2, Jale)’ 및 ‘(3, Niky)‘를 INSERT합니다.

질문:

insert into BAG values (1, 'Adidas'), (2, 'Jale'), (3, 'Niky');

출력:

데이터 세트 삽입

SELECT 쿼리를 실행하고 TABLE을 반환합니다.

출력:

데이터베이스의 데이터 테이블 보기

PSQL로 쿼리를 실행하는 것은 쉽습니다. 그러나 조건이 있습니다.

세미콜론 표기법 없이 쿼리 전에 쿼리를 실행하는 경향이 있는 경우 후자의 쿼리는 전혀 작동하지 않습니다. 따라서 세미콜론 없이 SELECT BAG를 호출한 다음 INSERT 작업을 실행하면 PSQL에서 오류가 표시됩니다.

출력:

세미콜론 없이 쿼리 전에 쿼리를 실행하면 오류가 표시됨

SELECT 뒤에 세미콜론을 넣지 않으면 쿼리가 종료되지 않습니다. 다음 INSERT 쿼리가 이 SELECT 쿼리에 추가되어 실행할 때 오류가 발생했습니다.

따라서 각 문장의 끝에서 항상 세미콜론을 처리하는 것이 좋습니다.

각 데이터베이스에 대해 개별적으로 쿼리 실행

하나 이상의 데이터베이스를 가질 수 있습니다. 데이터베이스를 나열하거나 지정하지 않고 쿼리를 실행하면 혼란이 더 커질 수 있습니다.

먼저 모든 데이터베이스를 살펴보겠습니다. PSQL에서 데이터베이스를 보려면 아래 쿼리를 실행할 수 있습니다.

질문:

\l or \l+

\l++가 추가된 \l의 보다 설명적인 버전입니다. 다음 목록에 내 데이터베이스가 있습니다.

출력:

데이터베이스 목록

\l+의 경우 결과는 다음과 같이 나옵니다.

출력:

+ 추가 없이 사용하는 데이터베이스 목록

현재 POSTGRES, TEMPLATE0TEMPLATE1의 세 가지 데이터베이스가 있습니다. 또한 SELECT 문을 사용하여 볼 수 있습니다.

질문:

SELECT datname from PG_DATABASE:

출력:

  datname
-----------
 postgres
 template1
 template0
(3 rows)

PG_DATABASE는 모든 데이터베이스 정보를 저장하는 카탈로그이고 DATNAME은 데이터베이스를 저장하는 이 테이블 내의 열입니다. Postgres 데이터베이스에 연결하려면 \c 명령을 사용하십시오.

명령:

\c postgres

그런 다음 쿼리를 실행하여 테이블을 \dt로 가져올 수 있습니다.

질문:

\dt

출력:

              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | animal          | table | postgres
 public | bag             | table | postgres
 public | bus             | table | postgres
 public | car             | table | postgres
 public | cat             | table | postgres
 public | dog             | table | postgres
 public | horse           | table | postgres
 public | identity_number | table | postgres
 public | mytable         | table | postgres
 public | person          | table | postgres
 public | person_details  | table | postgres
 public | rider           | table | postgres
 public | strings         | table | postgres
 public | student         | table | postgres
 public | tab             | table | postgres
 public | vehicle         | table | postgres
(16 rows)

이제 TEMPLATE0 또는 TEMPLATE1 데이터베이스에 연결하여 테이블을 볼 수 있지만 기본 설정으로 인해 들어오는 사용자 연결을 허용하지 않기 때문에 오류가 표시됩니다.

출력:

기본 설정 연결로 인한 데이터베이스 테이블 보기 오류

특정 데이터베이스에 대한 쿼리를 실행하려면 \c 명령을 사용하여 연결한 다음 쿼리를 사용하십시오.

질문:

psql -U postgres -d postgres -c "SELECT * from BAG;"

-d 키워드 다음에 Postgres 데이터베이스에 연결하고 쿼리를 실행합니다. 연결할 데이터베이스 이름을 작성한 다음 명령을 실행했습니다.

단일 쉼표로 -c 뒤에 쿼리를 작성하지 않도록 하십시오. 그러면 오류가 발생합니다. 이중 쉼표를 사용하여 유효한 문자열로 만들고 마지막에 안전한 쪽에 세미콜론을 씁니다.

이중 쉼표를 사용하지 않으면 다음 예와 같은 오류가 발생합니다.

질문:

psql -U postgres -d postgres -c 'SELECT * FROM BAG;'

출력:

psql: warning: extra command-line argument "*" ignored
psql: warning: extra command-line argument "FROM" ignored
psql: warning: extra command-line argument "BAG'" ignored

세미콜론 대신 SINGLE LINE 구문 사용

-S 또는 --SINGLE-LINE 명령을 사용하여 세미콜론 없이 한 줄 쿼리를 자동으로 종료할 수 있습니다. PostgreSQL 세션을 초기화할 때 다음 명령을 실행합니다.

명령:

psql -U postgres -S

또는

psql -U postgres --single-line

PSQL 세션을 실행하면 다음과 같은 내용이 표시됩니다.

postgres^# __

즉, postgres#postgres^#로 변경되어 SINGLE LINE 문 사용을 나타냅니다.

질문:

select * from BAG

위의 쿼리를 실행하면 완벽하게 작동하며 끝에 세미콜론(;)이 추가되지 않습니다. 모든 세션에서 필요한 암호로 데이터베이스를 보호하는 경우 PSQL에서 세션을 초기화할 때 PGPASSWORD 키워드를 사용할 수 있습니다.

PSQL에서 SQL 쿼리를 읽기 위해 파일 사용

더 큰 SQL 쿼리를 읽는 또 다른 유용한 구현은 때때로 작성된 SQL 쿼리와 함께 .sql 확장 파일을 사용하고 PSQL 명령줄에서 실행하는 것입니다. 예를 들어 다음 쿼리로 .sql 확장자를 가진 파일을 만들어 봅시다.

질문:

SELECT * from BAG;

바탕 화면에 QUERY1.SQL로 저장하겠습니다.

SQL 확장자로 파일 만들기

PSQL 세션을 초기화하는 동안 이것을 실행합니다. 다음 명령을 사용하십시오.

명령:

psql -U postgres -f "C:\Users\Bilal Shahid\Desktop\query1.sql"

출력:

 id |  mode
----+--------
  1 | Adidas
  2 | Jale
  3 | Nikey
  1 | Adidas
  2 | Jale
  3 | Nikey
  1 | Adidas
  2 | Jale
  3 | Nikey
  4 | John
  5 | mike
(11 rows)

-f 명령에 해당하는 또 다른 명령이 있습니다. \i 명령(이미 PSQL 세션 내에 있고 파일에서 쿼리를 실행하려는 경우).

질문:

postgres=# \i 'C:/Users/Bilal Shahid/Desktop/query1.sql'

백슬래시(/)와 단일 쉼표(')를 사용하십시오. 그렇게 하지 않으면 오류가 반환됩니다.

PSQL을 효율적으로 사용하는 방법을 배우고 오류를 생성할 수 있는 다양한 방법과 해결 방법을 이해하셨기를 바랍니다. 신중하고 깊이 있는 이해를 위해 항상 자습서를 철저히 읽으십시오.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - PostgreSQL Query