명령 줄 인수를 사용하여 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'폴더에 있습니다.
비밀번호를 제공 할 수있는 네 가지 선택 사항이 있습니다.
- PGPASSWORD 환경 변수를 설정하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
http://www.postgresql.org/docs/current/static/libpq-envars.html - .pgpass 파일을 사용하여 비밀번호를 저장하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
http://www.postgresql.org/docs/current/static/libpq-pgpass.html - 해당 특정 사용자에 대해 "신뢰 인증"을 사용하십시오. http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
- 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
'Programming' 카테고리의 다른 글
벡터에 주어진 요소가 포함되어 있는지 테스트 (0) | 2020.02.14 |
---|---|
HTML로 Base64 이미지를 표시하는 방법? (0) | 2020.02.14 |
Bower의 기본 구성 요소 폴더를 변경하는 방법은 무엇입니까? (0) | 2020.02.14 |
C # Windows 콘솔 앱에서 현재 줄을 어떻게 업데이트합니까? (0) | 2020.02.14 |
문자열의 마지막 문자를 얻는 방법? (0) | 2020.02.14 |