[postgresql] 명령 줄 인수를 사용하여 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

보다:

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


답변

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의 의견에 따라 업데이트


답변

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


답변

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

\i fileName.sql

절대 경로와

\ir filename.sql

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


답변

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

database-# >@pathof_mysqlfile.sql

또는

database-#>-i pathof_mysqlfile.sql

또는

database-#>-c pathof_mysqlfile.sql