通常在POSTGRES中删除外键。

10 浏览
0 Comments

通常在POSTGRES中删除外键。

如何一般性地删除外键。我的意思是,如果一个表中有许多外键约束,如下所示:

MonthlyEvaluatedBudgetTable的约束:

  • budgetid_pk(主键)
  • branchid_fk(外键)
  • accountid_fk(外键)
  • dept_fk(外键)

在PostgreSQL中,是否有一种一般性的方法来删除所有外键,而不是特定于现有表?

我使用以下代码在现有表中删除外键。

    ALTER TABLE "public"."monthlyevaluatedbudgettable"
    DROP CONSTRAINT "accountid_fk";

但我想要删除它时不需要具体输入accountid_fkbranchid_fkdept_fk。是否有相关方法?提前感谢您的帮助。

0
0 Comments

在POSTGRES中删除外键的一般方法

在使用POSTGRES数据库时,有时候需要删除数据库表中的外键。然而,有些情况下可能会遇到一些问题。本文将探讨出现这些问题的原因,并提供解决方法。

出现问题的原因:

问题的原因可能是由于使用了不正确的语法或条件。通常,我们使用类似于constraint_name like 'fk_%'的条件来删除外键。然而,这种方式可能会产生一些问题。

解决方法:

为了解决这个问题,我们可以使用constraint_type = 'FOREIGN KEY'的条件来删除外键。这种方式更加准确,可以避免一些潜在的问题。

以下是使用constraint_type = 'FOREIGN KEY'条件来删除外键的示例代码:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

通过使用这种方式,我们可以更加准确地删除数据库表中的外键,避免可能出现的问题。

在POSTGRES中删除外键时,我们应该避免使用constraint_name like 'fk_%'的条件,而应该使用constraint_type = 'FOREIGN KEY'的条件来删除外键。这样可以更加准确地删除外键,避免潜在的问题。

0
0 Comments

在PostgreSQL中,有时需要删除外键。然而,有时会出现错误,如上述内容中提到的错误。为了解决这个问题,可以通过在代码中添加额外的约束条件来防止错误的发生。

下面是解决这个问题的方法:

execute <<-SQL.squish
  DO $$
  declare r record;
  begin
    for r in (
      select constraint_name
      from information_schema.table_constraints
      where table_name='relationships'
      and constraint_name like 'fk_%'
    ) loop
    raise info '%','dropping '||r.constraint_name;
    execute CONCAT('ALTER TABLE "relationships" DROP CONSTRAINT '||r.constraint_name);
    end loop;
  end;
  $$
SQL

以上代码将通过循环查询满足特定条件的外键约束,然后依次删除这些约束。

感谢Vao Tsun提供的解决方案,它对我很有帮助。

0
0 Comments

问题的出现原因:代码中的循环语句通过查询信息模式下的表约束,删除了所有的主键和唯一键约束,而不仅仅是外键约束。

解决方法:如果只想删除外键约束,可以在查询语句中添加约束类型为"FOREIGN KEY"的过滤条件。

文章如下:

在PostgreSQL中通常会遇到需要删除外键的情况。下面的代码展示了如何通过循环语句在PostgreSQL中删除外键:

b=# create table a (a int primary key, b int unique);
CREATE TABLE
b=# create table b (a int references a(a), b int references a(b));
CREATE TABLE
b=# do
$$
declare r record;
begin
for r in (select constraint_name from information_schema.table_constraints where table_schema = 'public' and table_name='b') loop
  raise info '%','dropping '||r.constraint_name;
  execute CONCAT('ALTER TABLE "public"."b" DROP CONSTRAINT '||r.constraint_name);
end loop;
end;
$$
;
INFO:  dropping b_a_fkey
INFO:  dropping b_b_fkey
DO

需要注意的是,上述代码删除的不仅仅是外键约束,还包括所有的主键约束和唯一键约束。如果只想删除外键约束,可以在查询语句中添加约束类型为"FOREIGN KEY"的过滤条件。具体代码如下:

b=# do
$$
declare r record;
begin
for r in (select constraint_name from information_schema.table_constraints where table_schema = 'public' and table_name='b' and constraint_type ='FOREIGN KEY') loop
  raise info '%','dropping '||r.constraint_name;
  execute CONCAT('ALTER TABLE "public"."b" DROP CONSTRAINT '||r.constraint_name);
end loop;
end;
$$
;

通过上述代码,我们可以在PostgreSQL中删除外键约束。

0