2014-03-04 2 views
1

У меня есть таблица, где я получаю данные из 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 
+0

ли вы попробовать 'TRUNCATE TABLE loans_bank CASCADE'? –

+0

Но что произойдет с другими связанными таблицами, будет ли оно удалено, если я использую CASCADE? –

+0

Записи будут удалены так же, как 'DELETE CASCADE', основанные на ограничениях и связях. –

ответ

0

DROP STORAGE и REUSE ХРАНЕНИЯ включены только для совместимости; клаузулы анализируются и игнорируются

Попробуйте с

TRUNCATE TABLE loans_bank 
+0

Обновленный вопрос с ошибкой, которую я получаю без 'REUSE STORAGE' –

 Смежные вопросы

  • Нет связанных вопросов^_^