[英]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
看:
您有四種選擇來提供密碼:
當 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.