簡體   English   中英

使用命令行參數運行 PostgreSQL .sql 文件

[英]Run a PostgreSQL .sql file using command line arguments

我有一些 .sql 文件,其中包含數千個 INSERT 語句,需要在我的 PostgreSQL 數據庫上運行這些插入,以便將它們添加到表中。 這些文件太大以至於無法打開它們並將 INSERT 語句復制到編輯器窗口並在那里運行它們。 我在 Internet 上發現,您可以通過導航到 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 安裝的“數據”文件夾中找到。

當然,你會得到一個驗證的致命錯誤,因為你沒有包含用戶名......

試試這個,對我來說沒問題:)

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

如果數據庫是遠程的,使用與主機相同的命令

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

你應該這樣做:

\i path_to_sql_file

看:

在此處輸入圖像描述

您有四種選擇來提供密碼:

  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

當 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 shell 上登錄 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

您可以在命令行本身上同時提供用戶名和密碼。

   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)

2021解決方案

如果您的 PostgreSQL 數據庫在本地系統上。

psql dbname < sqldump.sql username

如果它在線托管

psql -h hostname dbname < sqldump.sql username

如果您有任何疑問或問題,請在評論中提出。

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:將顯示。

輸入您的密碼並輸入。 我看不到我輸入的密碼,但這次當我按下回車鍵時它起作用了。 實際上我正在將數據加載到數據庫中。

我實現了所寫的(位於我的腳本所在的目錄中)

::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 where -a echo all input from腳本和-f將命令從file.sql執行到mydatabase中,然后退出。

我正在使用: psql (PostgreSQL) 10.12 on (Ubuntu 10.12-0ubuntu0.18.04.1)

@wingman__7 的 2021 年答案的一個小改進:如果您的用戶名包含某些字符(在我的情況下是下划線),您需要使用-U標志傳遞它。
這對我有用:

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

嘗試在命令行控制台中使用以下命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM