No
una solución-pdo específico que puede o no ser suficiente en su caso:
- crear una: la memoria: la base de datos
- Attach el archivo de base de datos existente
- CREATE TABLE ... AS * SELECT ...
- Detach el archivo de base de datos
edición: un ejemplo
Primera ejemplo una base de datos almacenada en mydb.sq3
<?php
$pdo = new PDO('sqlite:mydb.sq3');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('CREATE TABLE foo(x INTEGER PRIMARY KEY ASC, y, z)');
$stmt = $pdo->prepare("INSERT INTO foo (x,y,z) VALUES (:x,:y,:z)");
$stmt->bindParam(':x', $x);
$stmt->bindParam(':y', $y);
$stmt->bindParam(':z', $z);
for($x=0; $x<100; $x++) {
$y = $x*2;
$z = $x*2+1;
$stmt->execute();
}
Ahora tenemos una: la memoria: base de datos y desea transferir la tabla foo
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('ATTACH "mydb.sq3" as filedb');
$pdo->exec('CREATE TABLE bar AS SELECT * FROM filedb.foo');
$pdo->exec('DETACH filedb');
Hecho. Sin embargo, vamos a echar un vistazo a la tabla sqlite_master
foreach($pdo->query('SELECT sql FROM sqlite_master') as $row) {
echo $row['sql'];
}
este imprime
CREATE TABLE bar(x INT,y,z)
El INTEGER PRIMARY KEY ASC declaración se pierde. Puede ser suficiente sin embargo ....
También estoy tratando de hacer esto para mis pruebas unitarias. El archivo sqlite db tendrá todos los datos de prueba. Pero no quiero que las pruebas cambien esto, así que quiero copiar el archivo db en: memoria: antes de ejecutar las pruebas en él. Simplemente dando una razón por la que alguien podría querer hacer esto. – andho