場景:在沒有命令行的情況下恢復postgresql轉儲(.sql文件)?
我已經構建了一個使用postgresql數據庫的PHP框架。該框架附帶一個.sql文件,該文件是該框架所需的默認表和數據的轉儲。
我希望能夠從客戶端(PHP)運行sql文件,而不是命令行,以便導入數據。這是因爲我遇到了一些服務器設置,其中訪問命令行並不總是可能的,並且/或者不能運行某些命令(例如,PHP用戶可能無法訪問pg_restore)。
我試圖簡單地分割.sql文件並將其作爲查詢使用pg_sql PHP擴展來運行,但是因爲轉儲文件使用COPY命令來創建數據,所以這似乎不起作用。這似乎是因爲使用了COPY,.sql文件希望使用pg_restore命令導入(除非我錯過了某些內容?)。
問:
所以現在的問題是,我怎麼能恢復.SQL轉儲,或在某種程度上創造的.sql轉儲,它可以通過客戶端(PHP),而不是在命令行中恢復?
例如:
<?php pg_query(file_get_contents($sqlFile)); ?>
不是:錯誤
$ pg_restore -d dbname filename
實施例:
我使用的pgAdmin III,以產生.SQL轉儲,使用 「普通」設置。在.sql文件,將被插入到表中的數據是這樣的:
COPY core_classes_models_api (id, label, class, namespace, description, "extensionName", "readAccess") FROM stdin;
1 data Data \\Core\\Components\\Apis\\Data The data api Core 310
\.
如果我然後運行的pgAdmin III查詢窗口內上面的SQL,我得到以下錯誤:
ERROR: syntax error at or near "1"
LINE 708: 1 data Data \\Core\\Components\\Apis\\Data The data api Core...
如果它是實際的SQL轉儲(而不是例如pg_dump的自定義格式),那麼您可以將查詢運行到數據庫中 –
我的初始想法是相同的。我已經嘗試過使用.sql文件,但它是COPY語句和導致問題的數據格式。這可能是因爲我使用pgAdmin III嗎?上面提到的pg_dump的自定義格式是?我已經在上面添加了一個示例。 –
看起來像它想從標準輸入的數據,我懷疑你可以從PHP調用dup。嘗試重寫文件以插入值 –