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


540

수천 개의 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'폴더에 있습니다.


6
이미 답변을 받았지만 "입력 할 수 없습니다"라는 경우를 대비하여 비밀번호를 입력해도 아무 것도 표시되지 않는다는 사실에 대해 이야기하고 있습니까? 즉 일반적으로 암호를 입력하고 Enter를 치고,이 경우 정상 해야 ... 작업
인 Evelyne Lachance

ITIS 사본 ( itis.gov )을 설치하는 데 비슷한 문제가있었습니다 . 데이터베이스가 존재하지 않으므로 이름을 사용할 수 없습니다. 방식의 PostgreSQL이 작동하기 때문에, 나는이 작업을 수행 할 수 있습니다 : psql의 --port = 5554 --username = 루트 --file = ITIS.sql template1를
Cyberknight

답변:


157

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

  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

안녕. 이제 설정을 신뢰하도록 설정했지만 소프트웨어가 로그인하기 위해 Windows 사용자 이름을 사용하려고합니다. Postgresql 데이터베이스에서 설정 한 역할을 사용하고 싶습니다. 명령을 실행하는 데 사용할 역할을 알려주는 방법이 있습니까?
CSharpened 11

2
@CSharpened : -u매뉴얼에 설명 된대로 매개 변수를 사용하십시오.
a_horse_with_no_name

# 2는 매우 간단합니다. host : port : db : user : pass를 포함하는 한 줄을 파일에 추가하면됩니다. 잘 했어.
Kriil

494

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

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

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

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

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

4
제공된 사용자 이름은 유효한 postgres 역할이어야합니다. 기본값은 현재 로그인 한 사용자입니다.
matthias krull

8
-a매개 변수입니까?
AlikElzin-kilaka

5
@ AlikElzin-kilaka -a는 여기에 필요하지 않습니다. "비
공백

이것이 정답입니다.
Kostanos

316

다음과 같이해야합니다.

\i path_to_sql_file

보다:

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


2
나는 얻는다Permission denied
Zac

4
chmod 777 myfile오류 Permission denied가 발생한 후 수정되었습니다
Ulug'bek Ro'zimboyev

5
@Zac Windows 시스템에서 권한 거부가 발생한 경우 잘못된 슬래시를 사용했을 수 있습니다.
pgsandstrom 2016 년

2
Windows 에서이 오류가 있었고 @pgsandstrom이 언급했듯이 슬래시로 밝혀졌습니다. 잘못된 슬래시 = 슬래시를 대신 사용하고 경로에는 따옴표가 없습니다. \ ic : /dev/script.sql
Dave

50

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


5
@ ChickenWing24 -a: all echo, -q: quiet, -f: file
zwacky

이것은 내 자신의 문제를 훌륭하게 해결했습니다
Temi 'Topsy'Bello

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

1
출력없이 어떻게 할 수
있습니까

2
psql -h <host> -d <database> -U <user_name> -p <port> -a -q -w -f <file> .sql
vishu9219

3
@ Lu32 -a 플래그를 생략 할 수도 있습니다 ( "비 공백 입력 라인을 읽을 때 표준 출력으로 인쇄합니다"라는 의미). -a없이 EDIT 테스트를 수행하여 정보를 적게 인쇄하지만 여전히 많은 정보를 인쇄합니다. vishu9219가 말했듯이 -q 플래그가 정확합니다.
Rauni Lillemets

41

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

\i fileName.sql

절대 경로와

\ir filename.sql

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


@Florian이 말했듯이 로그인하면 파일을 실행할 수 있습니다. SQL에서 주석 행은 두 가지 방법 중 하나로 표시해야합니다 ...-- 행 끝까지 주석 a)-한 행 주석 또는 b) / * 여러 행 주석 * /
S

26

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

database-# >@pathof_mysqlfile.sql

또는

database-#>-i pathof_mysqlfile.sql

또는

database-#>-c pathof_mysqlfile.sql

이 솔루션은 나보다 더 견고합니다.
답변

17

명령 행 자체에 사용자 이름과 비밀번호를 모두 지정할 수 있습니다.

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

환경 변수를 설정하거나 이상한 패스 파일을 사용하지 않으려는 경우 작동합니다. =)
martin

이 답변은 받아 들여질 것입니다. 감사합니다
grepit

13

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

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

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


9

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)

사용자를 어떻게 설정합니까? 새 .sql 파일에서 -f를 설치하고 실행하는 것은 처음입니다. 항상 틀린 암호를 말합니다
mKane

4

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

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

Password for user postgres: 나타납니다.

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


제 생각에는-d "postgres"
amphetamachine

@amphetamachine -d 데이터베이스 이름을 확인하십시오psql --help
Yaz

1

나는 그 스크립트를 작성했다 (스크립트가있는 디렉토리에 위치)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

-u user 이다 내가 다음 스크립트를 실행 할 데이터베이스 소유하는 역할 psql받는 커넥트 psql그 후 콘솔 -d my_database에로드 나 mydatabase마지막으로 -a -f file.sql어디에 -a스크립트에서 모든 입력을 에코와 -f의 명령을 실행 file.sqlmydatabase다음 종료합니다.

사용중인 : psql (PostgreSQL) 10.12 on (Ubuntu 10.12-0ubuntu0.18.04.1)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.