场景:在没有命令行的情况下恢复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。尝试重写文件以插入值 –