我是一個相當新的postgresql,需要在php中構建自定義備份和還原腳本。從閱讀這裏的帖子,我瞭解到psql -E
這將輸出到終端SQL爲一個\命令postgres用來描述一個序列,表,視圖等
我不能弄清楚,以便我可以複製sql我的工作中的語句是如何組合2個或更多的sql語句以實現最終結果。例如,\d mytable
將輸出可用於爲備份腳本創建CREATE TABLE腳本的表的結構。這需要4個查詢。是否有一套方法可以將這些查詢合併起來?揭祕postgresql 內部查詢
回答
你不想使用psql
的信息查詢(\ commands
)。你需要的是pg_dump
,而不是psql
。 psql
向您展示了表格外觀的人類可讀視圖; pg_dump
爲您提供了DDL重新創建它,這是你說你想要的,因爲你正在試圖創建一個「備份腳本」。
不幸的是,目前pg_dump
不是真的可以作爲庫調用,並且提取它的查詢並不簡單。相反,您通常需要調用pg_dump
作爲shell命令。
對於視圖,您可以使用SQL函數SELECT pg_get_viewdef('view_name')
。不幸的是,對於表或其他數據庫對象沒有等價物。請參閱system information functions。
與psql
一樣,pg_dump
可能會使用一系列查詢爲給定命令構造SQL文本。你可以找到pg_dump
如何構建這些在source code for pg_dump
,特別是可怕的pg_dump.c
。見dumpTable()
for instance。
請注意,如果您嘗試複製pg_dump
如何複製它,您將爲自己創建一個維護噩夢。請記住,PostgreSQL目錄並不保證從版本到版本穩定 - 類似psql
和pg_dump
和information_schema
等工具通常可以保護您免受此類更改。如果您深入研究目錄,那麼每次發佈主要版本時都必須重新測試,並處理任何落後的compat中斷。看看pg_dump
中的所有特定於版本的案例,瞭解自己的想法。
我覺得這很爛,那的pg_dump
核心功能應該在libpqdump
或在服務器端擴展,但遺憾的是它沒有了,沒有人願意做,使所需的大量工作那可能。
簡短版本:只需使用pg_dump
。它支持選擇性轉儲選項,如-t
,如果你需要它們。
+1我很確定這是OP想要的,儘管他否認這一點。這是一個經典的[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)恕我直言。 –
@ÁlvaroG.VicarioHuh,我不知道這個謬誤有一個名字。我通常會寫(當我可以被打擾的時候),比如「請解釋* why * this * how *;你試圖解決的根本問題是什麼,而不是你認爲你應該如何解決它。「 –
@CraigRinger。如果使用pg_dump是一個選項,我不會試圖編寫自己的和恢復備份腳本來通過瀏覽器操作數據庫。我用於生產/託管的ISP有一個非常有限的界面只有PhpPgAdmin。在我的開發方面使用pg_dump是可以的,但是我們已經查看了開關和選項來縮小它,但是它仍然會生成一個需要大量編輯的轉儲文件,然後我才能夠輕鬆地複製並粘貼到PhpPgAdmin查詢textarea中。一個用CREATE TABLE語句查詢要重建的元素的方法 – dwlamb
- 1. 揭祕XPATH
- 2. 揭祕Web認證
- 3. PostgreSQL MAX()內部查詢真的很慢
- 4. postgresql慢查詢(dblink和內部聯接)
- 5. 揭祕lpthreads下的gcc
- 6. 在Python中揭祕超級?
- 7. Python [Django] + Uwsgi設置揭祕
- 8. 揭祕jQuery蒙面金錢
- 9. mod_rewrite的:揭祕RewriteBase(一勞永逸)
- 10. Oracle查詢內部查詢
- 11. PHP - 查詢內部查詢
- 12. Top&httpd - 揭祕實際運行的內容
- 13. 揭祕這個git日誌圖
- 14. Vista掃雷艇Gameover揭祕算法
- 15. 實體框架發佈揭祕
- 16. 內部查詢JOIN
- 17. PostgreSQL的:不能指在新的內部查詢規則中的
- 18. 神祕的oracle查詢
- 19. PostgreSQL的查詢
- 20. 查詢PostgreSQL中
- 21. PostgreSQL的查詢
- 22. Tricky Postgresql查詢
- 23. 查詢JSON PostgreSQL
- 24. Postgresql查詢
- 25. Postgresql子查詢
- 26. 查詢PostgreSQL中
- 27. PostgreSQL在10秒鐘內查詢
- 28. 內部查詢比全子查詢慢
- 29. MySQL查詢 - 不使用內部查詢
- 30. 內部加入查詢的UPDATE查詢
你問的是如何從PHP執行'psql -E',如何解析'psql'的輸出,如何生成'CREATE TABLE'語句或以上都不是? –
我在問如何在斜槓命令('\ d mytable')中顯示任何一組查詢'psql -E',這樣我就可以理解它在php代碼中的使用。對於如何使用或鏈接在一起的兩個或多個查詢,必須有某種邏輯。它們不是子查詢。它們是否起作用? – dwlamb