一台设备每10分钟生成不同行的.db文件。所有的sqlite文件都有一个名为" wifi"。
的表我正在编写一个php应用程序来读取所有文件中的所有数据。我正在使用ATTACH方法来组合数据库。像:
try {
$file_db = new PDO('sqlite::memory:');
$file_db->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$file_db->exec("ATTACH DATABASE 'wifi_16-09-02_09_44_06.db' AS db1");
//many more attached files here, like 1000 or 2000
$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM db2.wifi, ...');
$file_db = null;
}
catch(PDOException $e) {
echo $e->getMessage();
错误:
SQLSTATE [HY000]:常规错误:1个附加数据库太多 - 最多10个
在我编写此代码后,我发现sqlite attach有一个限制,默认情况下是10,并且只能根据this增加到125.
如何附加数千个数据库?如果我的方法错了,解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
拥有数千个数据库是错误的。
您应该将所有数据放入单个数据库中的单个表中。
如果无法做到这一点,无论如何都要这样做,创建一个临时数据库并逐个复制数据。
答案 1 :(得分:0)
有一些方法可以解决这个问题。例如,您可以更改编程方法,因此您不需要附加大量sqlite数据库。但是,为了通过这个限制,我认为您可以更改SQLite的编译选项,有关更多信息,请查看以下链接: http://www.sqlite.org/compile.html
答案 2 :(得分:0)
只需将每个新数据库打开为新的PDO实例。
$file_db = new PDO('sqlite::wifi_16-09-02_09_44_06.db');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM db2.wifi, ...');
// do whatever
$file_db = new PDO('sqlite::wifi_whatever.db');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM
等等。
就这么简单。