У меня есть таблица, где я получаю данные из rss-канала. Мне нужно усечь таблицу базы данных перед импортом, чтобы у меня не было никаких «старых» записей, которых нет в rss-фиде.Обрезать таблицу с ограничением в postgresql с php
Но когда я пытаюсь усечь, я получаю ошибку duplicate key value violates unique constraint
Я пытался искать ответ, но я не могу найти кого-нибудь, что объясняет, как сделать это с PHP.
Мой старый код:
try {
$db->beginTransaction();
$stmt = $db->prepare("TRUNCATE TABLE loans_bank REUSE STORAGE");
$stmt->execute();
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
Это ошибка, я получаю:
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "REUSE"
LINE 1: TRUNCATE TABLE loans_bank REUSE STORAGE
^PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "loans_bank_pkey"
DETAIL: Key (id)=(358976) already exists.' in /home/USER/import/get_bank.php:66
Stack trace:
#0 /home/USER/import/get_bank.php(66): PDOStatement->execute(Array)
#1 {main}
thrown in /home/USER/import/get_bank.php on line 66
Я пробовал:
try {
$db->beginTransaction();
$stmt = $db->prepare("ALTER TABLE loans_bank DISABLE CONSTRAINT loans_bank_pkey");
$stmt = $db->prepare("TRUNCATE TABLE loans_bank REUSE STORAGE");
$stmt = $db->prepare("ALTER TABLE loans_bank ENABLE CONSTRAINT loans_bank_pkey");
$stmt->execute();
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
Но я получаю ту же ошибку. Как отключить отношения, пока я обрезаю таблицу?
Edit 1:
Если я пытаюсь:
try {
$db->beginTransaction();
$stmt = $db->prepare("TRUNCATE TABLE $table");
$stmt->execute();
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
Я получаю эту ошибку:
SQLSTATE[0A000]: Feature not supported: 7 ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "loans_loan500" references "loans_bank".
HINT: Truncate table "loans_loan500" at the same time, or use TRUNCATE ... CASCADE.PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "loans_bank_pkey"
DETAIL: Key (id)=(358976) already exists.' in /home/USER/import/get_bank.php:69
Stack trace:
#0 /home/USER/import/get_bank.php(69): PDOStatement->execute(Array)
#1 {main}
thrown in /home/USER/import/get_bank.php on line 69
ли вы попробовать 'TRUNCATE TABLE loans_bank CASCADE'? –
Но что произойдет с другими связанными таблицами, будет ли оно удалено, если я использую CASCADE? –
Записи будут удалены так же, как 'DELETE CASCADE', основанные на ограничениях и связях. –