我使用Perl DBI和PostgreSQL,我的用户将删除表中的行,其中一些因为外键约束而无法删除,这很好,但我想要一种方法标记前端的那些行,以便在尝试删除它们之前知道哪些行有约束。现在,用户只需点击"删除"并将收到错误或删除行。
答案 0 :(得分:1)
我对PostgreSQL并不十分熟悉,但我相信你可以使用:
SELECT *
FROM information_schema.table_constraints
WHERE table_name = 'YourTable'
更新 - 在这里看起来像一个可靠的答案: Postgres: SQL to list table foreign keys
答案 1 :(得分:0)
所以我自己想出来了。对于处于类似情况的任何人,您可以启用交易
$dbh->{AutoCommit} = 0;
然后尝试删除行,例如这样......
my $sth = $dbh->prepare("DELETE FROM auth_users WHERE username = ?");
$sth->execute($username);
然后检查错误......
if ( $sth->err ) { print "CAN'T be deleted.";}
else { print "CAN be deleted.";}
然后回滚到不提交删除,以防它被删除...
$dbh->rollback;
这对我有用。如果有人有任何更好的想法,或者对这种方法有些担忧,请随时分享。