我是一个相当新的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