2012-03-16 185 views
275

我有一些.sql文件,其中有成千上萬個INSERT語句,需要在PostgreSQL數據庫上運行這些插入操作以便將它們添加到表中。這些文件非常大,無法打開它們並將INSERT語句複製到編輯器窗口並在那裏運行。我發現在互聯網上,你可以通過導航到你的PostgreSQL的bin文件夾使用以下安裝:使用命令行參數運行PostgreSQL .sql文件

psql -d myDataBase -a -f myInsertFile 

在我的情況:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql 

我接着問了我的用戶的密碼,但我不能輸入任何東西,當我打進輸入我得到這個錯誤:

psql: FATAL: password authentication failed for user "myUsername"

爲什麼它不會讓我輸入密碼。有沒有辦法解決這個問題,因爲我可以運行這些腳本至關重要?

我解決此問題得到了加在我的pg_hba.conf文件具有以下結構的新條目:

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

pg_hba.conf文件通常可以在你的PostgreSQL的「數據」文件夾中找到安裝。

+4

你已經有了答案,但爲了以防萬一......「我什麼都不能進入」,你可能在談論輸入你的密碼沒有顯示任何東西的事實嗎?在這種情況下,這是正常的,通常輸入密碼並按Enter *應該*工作... – 2014-08-24 20:12:28

+0

我有一個類似的問題安裝ITIS副本(http://itis.gov)。該數據庫不存在,所以我不能使用它的名字。由於PostgreSQL的工作方式,我可以這樣做:psql --port = 5554 --username = root --file = ITIS.sql template1 – Cyberknight 2015-01-16 15:40:35

回答

79

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

  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也可以use a connection string
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
+0

嗨。我現在已將設置設置爲信任,但我注意到該軟件試圖使用我的Windows用戶名登錄。我想使用我在Postgresql數據庫中設置的角色。有沒有辦法告訴它使用哪個角色來運行命令? – CSharpened 2012-03-16 11:17:07

+1

@CSharpened:使用手冊 – 2012-03-16 11:18:26

+0

#2中記錄的'-u'參數非常簡單。只需將包含host:port:db:user:pass的一行添加到文件中即可。工作很好。 – Kriil 2016-06-17 14:23:47

291

當然,你會得到一個致命錯誤進行鑑別,因爲你不包括用戶名...

試試這個,這是確定我:)

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

如果數據庫是遠程的,

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

請注意,提供的用戶名必須是有效的postgres角色。默認值是當前登錄的用戶。 – 2012-10-05 17:29:14

+1

爲什麼'-a'參數? – 2018-02-06 09:19:06

+0

@ AlikElzin-kilaka'-a'在這裏不需要。它是「在讀取時將所有非空輸入行打印到標準輸出」 – superbly 2018-02-26 21:16:17

5

走過使用相同的命令與主機上如何運行在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) 
18

通過終端登錄到你的數據庫,並嘗試這個辦法:

database-# >@pathof_mysqlfile.sql 

database-#>-i pathof_mysqlfile.sql 

database-#>-c pathof_mysqlfile.sql 
+0

該解決方案對我而言更加穩固;而不是標記爲answe – AlexG 2014-12-14 15:25:59

3

你可以打開一個命令提示符並運行作爲管理員。然後鍵入

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

Password for user postgres:會顯示出來。

輸入您的密碼並輸入。我無法看到我輸入的密碼,但是這一次當我按下輸入法時它就起作用了。其實我正在將數據加載到數據庫中。

+0

我認爲你的意思是'-d「postgres」' – amphetamachine 2014-08-22 14:21:37

+0

@amphetamachine'-d'爲數據庫名稱,請檢查'psql --help' – Yaz 2016-06-30 12:40:56

181

你應該做的是這樣的:

\i path_to_sql_file 

參見:

Enter image description here

+0

我得到'權限被拒絕' – Zac 2017-03-23 15:11:23

+3

做完'chmod 777 myfile ''錯誤權限denied'固定 – 2017-04-10 12:39:12

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

我怎麼能做到這一點,沒有輸出 – Lu32 2016-02-08 19:42:03

+1

的psql -h -d -U -p -a -q -w -f .SQL – vishu9219 2016-02-10 07:43:36

+3

@ Lu32你也可以離開了標誌-a(這意味着「在讀取時將所有非空輸入行打印到標準輸出」)。編輯測試,沒有 - 打印出來少,但仍然太多的信息。所以-q標誌是正確的,正如vishu9219所說。 – 2016-02-17 12:14:54

15

時使用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 

然後提示您輸入用戶的密碼。

+2

介意解釋「-a」和「-q」是什麼? – ChickenWing24 2016-09-19 09:46:08

+3

@ ChickenWing24'-a':全部回聲,'-q':安靜,'-f':文件 – zwacky 2016-11-02 23:25:56

9

您可以在命令行本身提供用戶名和PASSSWORD。

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

如果您不想設置環境變量或使用奇怪的傳遞文件, =) – martin 2017-10-27 11:16:28

4

,你甚至可以做到這樣:

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

如果你的機器上sudo訪問,它不是建議在生產腳本只是爲了你自己的機器上測試它的最簡單的方法。

1

如果您登錄到基於Linux PSQL shell的命令是:

\i fileName.sql 

了絕對路徑和

\ir filename.sql 

從那裏你叫PSQL的相對路徑。