有没有办法判断数据库行是否有约束?

时间:2014-03-13 22:19:14

标签: sql perl postgresql dbi

我使用Perl DBI和PostgreSQL,我的用户将删除表中的行,其中一些因为外键约束而无法删除,这很好,但我想要一种方法标记前端的那些行,以便在尝试删除它们之前知道哪些行有约束。现在,用户只需点击"删除"并将收到错误或删除行。

2 个答案:

答案 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;

这对我有用。如果有人有任何更好的想法,或者对这种方法有些担忧,请随时分享。