用php在postgresql中截断带约束的表
我有一个从rss提要获取数据的表。我需要在导入之前截断数据库表,这样我就不会有任何rss提要中没有的旧条目 但当我尝试截断时,会得到一个错误,即重复的键值违反了唯一约束 我已经尝试过搜索答案,但我找不到任何人解释如何使用php 我的旧代码:用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
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表中具有匹配键的项,如果你把桌子摆好就可以了,但我不想这样!我有不同贷款产品的其他表,如果我这样做,我的所有产品也将被删除!没有任何方法可以暂时禁用关系吗?更新了问题,出现了我在不重用存储的情况下收到的错误