赏金编辑:我保留了原始问题,但希望对 Postgres 似乎陷入的整个权限问题有一个好的答案。
'导入和导出客户数据库:现场指南'
我今天刚得到这份工作,我们需要使用PostgreSQL。
客户端有两个主机,它们仅使用php页面管理访问数据库。没有 SSH。
我们需要导出数据,然后将其导入到本地开发机器。
明智地MySQL我有点不清楚正确的流程。
有 PostgreSQL >> 数据库 >> 导出
,从那里得到:
我一直在查阅文档,但说实话,我找不到简单的解释,而且目前我并不真正关心数据库或 Postgres。我们需要做的就是解决站点 PHP 的问题。
向我的系统管理员兄弟姐妹提供一份概要/备忘单/指南。
编辑:
将问题改为包含导入数据库时的 PostgreSQL 权限。
就权限而言,设置新的 PostgreSQL 服务器似乎确实需要做更多的事情。
我特别询问有关 phpPgAdmin 的问题,因为我的服务器不是本地主机并且没有 GUI。
我感觉这是权限问题http://pgedit.com/public/sql/acl_admin/index.html
澄清客户端机器上没有 SSH。
仍然找不到关于整个过程的简明文档。我真的在逃避任务,直到我有了更清晰的想法。为了方便,可能会考虑转换成 MySQL db。
答案1
出口
- 登录
- 导航到“导出”选项卡
- 点击“结构和数据”单选按钮
- 点击“下载”单选按钮
- 单击“导出”按钮并将其保存到本地机器。
进口
- 导航http://www.pgadmin.org/去下载管理员III(更好的免费 Postgres GUI 工具之一)
- 安装
- 使用它来满足您所有的 Postgres 需求。
答案2
关于权限,只需打开数据库转储(纯文本)并查找尝试更改当前用户或设置表所有者的行。然后只需进行搜索/替换,并将原始所有者替换为新用户名。完全无需担心授予/更改权限 :D
我们在从开发到生产的过程中总是需要这样做,原始数据库/表所有者是开发人员,一旦我们准备启动,我们就需要将其更改为客户帐户。
我们总是使用控制台pg_dump
和其他相关的命令行工具来工作,但我希望这些工具能够映射到您在 Web 界面中获得的选项。
答案3
phpPgAdmin 导出使用 pg_dump。如果您想知道它在做什么,可以阅读相关内容。
您可能还想将其导出为 SQL 而不是 COPY。COPY 适用于 Postgres,如果您想尝试使用不同的数据库,则需要 SQL。如果您习惯使用不同的数据库,它也更容易理解。
通过“结构和数据”您将获得一个 SQL 文件,该文件从数据库表结构开始,然后是所有数据,然后是约束和键。
正如 sascha 指出的那样,您可能遇到了权限问题。我一直觉得删除权限行或将其注释掉更容易,因为这只是针对开发数据库。删除/注释/更改其中带有“OWNER”的行。例如
ALTER TABLE schema.table OWNER TO pguser;
每个 CREATE TABLE 语句后面都会有一个这样的语句,用于设置表所有者。
输入
如果您遇到 SQL 错误(我经常看到这种情况,具体取决于数据。带有奇数字符的字符串可能很麻烦),拆分文件并先复制出结构并将其作为标准 SQL 查询运行可能会更容易。然后从数据开始,一次导入一个表。当您将其分成几部分时,可以更容易地找到错误。特别是在处理非常无用的错误消息时。
是的,这需要大量的复制和粘贴工作,但它完成了工作,并且可能比将其移植到 MySQL 并更改 PHP 以连接并从 MySQL 而不是 Postgres 获取数据花费的时间更少。
PhpPgAdmin 和 pgadminIII 都具有运行 SQL 语句的能力。
pgAdminIII -> 选择数据库 -> 选择“运行任意 SQL 查询”按钮。PhpPgAdmin -> 选择数据库 -> 选择“SQL”链接。
说实话,这是我发现的移动数据库最不麻烦的方法。虽然耗时更长,但前提是你不会遇到错误。
答案4
快跑,不要离开你的托管服务提供商。您不仅希望通过 phppgadmin 直接访问数据。
phppgadmin(以及 phpmyadmin)在这些情况下存在很大问题。您将无法获取转储。
原因:使用 PHP 和 apache 时,脚本的执行时间和内存都会受到限制。就执行时间/内存而言,现在可能不是问题,但随着数据库的增长,您将会遇到这个问题。
要获得良好的转储,您至少需要访问数据库(如果数据库直接暴露在网络上,则当然需要 SSL 保护)。无论是通过 SSH 还是直接通过 psql,否则我真的看不到获得转储的好选择。phppgadmin(或 phpmyadmin)可能方便浏览数据库进行一些更改、进行一些(较小的)选择等,但如果您需要获取大量数据,则不方便。
我在执行备份/恢复时曾多次遇到过这两种工具失败的情况,原因是 PHP 超时或内存占用过多。
至于如何备份原始 postgres 文档的指南通常非常好:http://www.postgresql.org/docs/8.3/static/backup.html
现在你的问题是如何获得一个好的数据库转储:
- 使用“正常” SQL 格式(是的,文档说它要慢得多,但我发现它是最可靠的选择)
- 不要在 phppgadmin 中“显示”转储,而是下载它(是否压缩可能取决于 php 安装以及创建转储所需的时间,实际上“显示”选项也是如此)
我再怎么强调也要直接通过 SSH 或 psql 访问主机。如果您的托管服务提供商不允许您访问权限,请设置本地 PostgreSQL 创建一个游乐场数据库并向他们发送您想要使用的 pg_dump 命令,让他们将其放在受 SSL 和密码保护的目录中并从那里下载。