用php在postgresql中截断带约束的表

用php在postgresql中截断带约束的表,php,postgresql,php-pgsql,Php,Postgresql,Php Pgsql,我有一个从rss提要获取数据的表。我需要在导入之前截断数据库表,这样我就不会有任何rss提要中没有的旧条目 但当我尝试截断时,会得到一个错误,即重复的键值违反了唯一约束 我已经尝试过搜索答案,但我找不到任何人解释如何使用php 我的旧代码: try { $db->beginTransaction(); $stmt = $db->prepare("TRUNCATE TABLE loans_bank REUSE STORAGE"); $stmt

我有一个从rss提要获取数据的表。我需要在导入之前截断数据库表,这样我就不会有任何rss提要中没有的旧条目

但当我尝试截断时,会得到一个错误,即重复的键值违反了唯一约束

我已经尝试过搜索答案,但我找不到任何人解释如何使用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();
}    
但我也犯了同样的错误。在截断表时,如何禁用关系

编辑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

您是否尝试截断表loans\u bank CASCADE?但是连接的其他表会发生什么情况,如果使用CASCADE,它也会被删除吗?根据约束和关系,记录将被删除,就像删除CASCADE一样。不会删除其他表,只会删除loans\u bank表中具有匹配键的项,如果你把桌子摆好就可以了,但我不想这样!我有不同贷款产品的其他表,如果我这样做,我的所有产品也将被删除!没有任何方法可以暂时禁用关系吗?更新了问题,出现了我在不重用存储的情况下收到的错误