Programming

명령 줄 인수를 사용하여 PostgreSQL .sql 파일 실행

procodes 2020. 2. 14. 23:49
반응형

명령 줄 인수를 사용하여 PostgreSQL .sql 파일 실행


수천 개의 INSERT 문이 포함 된 일부 .sql 파일이 있으며 PostgreSQL 데이터베이스에서 이러한 삽입을 실행하여 테이블에 추가해야합니다. 파일이 너무 커서 파일을 열고 INSERT 문을 편집기 창에 복사하여 실행할 수 없습니다. 인터넷에서 PostgreSQL 설치의 bin 폴더로 이동하여 다음을 사용할 수 있음을 발견했습니다.

psql -d myDataBase -a -f myInsertFile

나의 경우에는:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

그런 다음 사용자의 비밀번호를 묻는 메시지가 표시되지만 아무것도 입력 할 수 없으며 Enter 키를 누르면이 오류가 발생합니다.

psql : 치명적 : 사용자 "myUsername"의 비밀번호 인증에 실패했습니다.

비밀번호를 입력 할 수없는 이유는 무엇입니까? 이 스크립트를 실행할 수 있어야하므로이 문제를 해결할 방법이 있습니까?

pg_hba.conf 파일에 다음과 같은 구조로 새 항목을 추가하여이 문제를 해결했습니다.

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

pg_hba.conf 파일은 일반적으로 PostgreSQL 설치의 'data'폴더에 있습니다.


비밀번호를 제공 할 수있는 네 가지 선택 사항이 있습니다.

  1. PGPASSWORD 환경 변수를 설정하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. .pgpass 파일을 사용하여 비밀번호를 저장하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 해당 특정 사용자에 대해 "신뢰 인증"을 사용하십시오. http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. PostgreSQL 9.1부터 연결 문자열을 사용할 수도 있습니다 :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

물론 사용자 이름을 포함하지 않기 때문에 인증에 치명적인 오류가 발생합니다.

이것을 시도하십시오, 그것은 나를 위해 좋습니다 :)

psql -U username -d myDataBase -a -f myInsertFile

데이터베이스가 원격 인 경우 호스트와 동일한 명령을 사용하십시오.

psql -h host -U username -d myDataBase -a -f myInsertFile

다음과 같이해야합니다.

\i path_to_sql_file

보다:

여기에 이미지 설명을 입력하십시오


export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

PostgreSQL 서버가 다른 곳에있을 때 * .sql 파일을 실행하려면 이것을 사용하십시오 :

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

그런 다음 사용자의 비밀번호를 입력하라는 메시지가 표시됩니다.

편집 : @zwacky의 의견에 따라 업데이트


Linux 쉘에서 psql에 로그인 한 경우 명령은 다음과 같습니다.

\i fileName.sql

절대 경로와

\ir filename.sql

psql을 호출 한 상대 경로입니다.


터미널을 통해 데이터베이스에 로그온하고 다음을 시도하십시오.

database-# >@pathof_mysqlfile.sql

또는

database-#>-i pathof_mysqlfile.sql

또는

database-#>-c pathof_mysqlfile.sql

명령 행 자체에 사용자 이름과 비밀번호를 둘 수 있습니다.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

이런 식으로 할 수도 있습니다.

sudo -u postgres psql -d myDataBase -a -f myInsertFile

sudo컴퓨터에 액세스 할 수 있고 자신의 컴퓨터에서 테스트하기 위해 프로덕션 스크립트에 권장되지 않는 경우 가장 쉬운 방법입니다.


Linux의 PostgreSQL 명령 행에서 SQL을 실행하는 방법을 살펴보십시오.

터미널을 열고 다음 psql명령을 실행할 수 있는지 확인하십시오 .

psql --version
which psql

내 버전은 9.1.6에 있습니다 /bin/psql.

라는 일반 텍스트 파일 만들기 mysqlfile.sql

해당 파일을 편집하고 한 줄을 넣으십시오.

select * from mytable;

명령 행에서이 명령을 실행하십시오 (pgadmin 및 kurz_prod에 대한 사용자 이름 및 데이터베이스 이름으로 대체).

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

다음은 터미널에서 얻은 결과입니다 (암호를 묻지 않습니다).

select * from mytable;

test1
--------
hi
me too

(2 rows)

명령 프롬프트를 열고 관리자 권한으로 실행할 수 있습니다. 그런 다음

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: 나타납니다.

비밀번호를 입력하고 입력하십시오. 입력 한 비밀번호를 볼 수 없었지만 이번에는 Enter 키를 누르면 작동했습니다. 실제로 데이터베이스에 데이터를로드하고있었습니다.

참고 URL : https://stackoverflow.com/questions/9736085/run-a-postgresql-sql-file-using-command-line-arguments



반응형