programing

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

javamemo 2023. 5. 5. 08:32
반응형

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

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

psql -d myDataBase -a -f myInsertFile

내 경우:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

그런 다음 사용자의 암호를 입력하라는 메시지가 표시되지만 아무것도 입력할 수 없으며 Enter 키를 누르면 다음 오류가 표시됩니다.

psql: FATAL: "myUsername" 사용자에 대한 암호 인증 실패

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

저는 다음 구조를 가진 제 pg_hba.conf 파일에 새 항목을 추가하여 이 문제를 해결했습니다.

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

pg_hba.conf 파일은 일반적으로 Postgre의 'data' 폴더에서 찾을 수 있습니다.SQL 설치.

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

이것을 사용해 보세요, 저는 괜찮아요 :)

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

데이터베이스가 원격인 경우 호스트에서 동일한 명령 사용

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

이 작업은 다음과 같이 수행해야 합니다.

\i path_to_sql_file

참조:

여기에 이미지 설명 입력

암호를 제공하려면 다음과 같은 네 가지 옵션을 선택할 수 있습니다.

  1. PG PASSWORD 환경 변수를 설정합니다.자세한 내용은 설명서를 참조하십시오.
    http://www.postgresql.org/docs/current/static/.htmlhttp ://www.postgresql.org/docs/current/static/libpq-envars.html
  2. 합니다.pgpass 파일을 사용하여 암호를 저장합니다.자세한 내용은 설명서를 참조하십시오.
    http://www.postgresql.org/docs/current/static/.htmlhttp ://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 해당 특정 사용자에 대해 "신뢰 인증" 사용: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. 포스트그레 이후SQL 9.1 연결 문자열도 사용할 수 있습니다.
    https://www.postgresql.org/docs/current/static/libpq-connect.html#://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

이를 통해 Postgre에서 *.sql 파일을 실행합니다.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

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

EDIT: @zwacky에서 제공한 코멘트를 기반으로 업데이트됨

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

\i fileName.sql

절대적인 경로를 위해 그리고.

\ir filename.sql

psql을 호출한 상대 경로의 경우.

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

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

database-# >@pathof_mysqlfile.sql

또는

database-#>-i pathof_mysqlfile.sql

또는

database-#>-c pathof_mysqlfile.sql

"-d" 매개 변수를 사용하여 명령줄 자체에 사용자 이름과 PASSWORD를 모두 지정할 수 있습니다.

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

당신은 심지어 이런 방법으로 그것을 할 수도 있습니다.

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

가지고 계신다면,sudo시스템에서 액세스할 수 있으며, 프로덕션 스크립트에는 권장되지 않습니다. 사용자의 시스템에서 테스트하는 것이 가장 쉬운 방법입니다.

2021년 솔루션

당신의 Postgre라면SQL 데이터베이스는 로컬로 시스템에 있습니다.

psql dbname < sqldump.sql username

온라인으로 호스팅되는 경우

psql -h hostname dbname < sqldump.sql username

의문점이나 의문점이 있으시면 댓글로 물어보세요.

Postgre 명령줄에서 SQL을 실행하는 방법에 대해 설명합니다.Linux의 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)
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

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

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

Password for user postgres:나타날 것입니다.

암호를 입력하고 입력합니다.제가 입력하는 비밀번호를 볼 수 없었지만, 이번에는 Enter 키를 누르면 작동했습니다.사실 저는 데이터베이스에 데이터를 로드하고 있었습니다.

@wingman__7의 2021년 답변에서 약간 개선된 점: 사용자 이름에 특정 문자(나의 경우 밑줄)가 포함된 경우, 해당 문자를 사용자 이름과 함께 전달해야 합니다.-U깃발
이것은 저에게 효과가 있었습니다.

$ psql -h db.host -d db_name -U my_user < query.sql 

작성한 문서를 보관했습니다(내 스크립트가 있는 디렉토리에 위치).

::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.sql안으로mydatabase종료합니다.

사용 중: psql(Postgre)SQL) 10.12 on (Ubuntu 10.12-0ubuntu0).18.04.1)

명령줄 콘솔에서 다음 명령을 사용해 보십시오.

psql -h localhost -U postgres -f restore.sql 

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

반응형