代码之家  ›  专栏  ›  技术社区  ›  Roby Sottini

如何在PostgreSQL中使用非公共模式添加外键?

  •  0
  • Roby Sottini  · 技术社区  · 7 年前

    我正在尝试使用此psql命令添加外键:

    places_local=> ALTER TABLE prestamos_bienes.bienes
    ADD CONSTRAINT "bienes_prestamos_bienes.marcas_id_marca_fk"
    FOREIGN KEY (id_marca) REFERENCES "prestamos_bienes.marcas" (id_marca);
    

    但我得到了这个错误:

    ERROR: no existe la relación «prestamos_bienes.marcas»
    

    这意味着:

    ERROR: relation «prestamos_bienes.marcas» does not exist
    

    这个 PostgreSQL error 代码为 42P01(未定义的_表) .

    我的数据库是: 地点(local)

    我的模式是:

    我的桌子是: 马卡斯

    1 回复  |  直到 7 年前
        1
  •  1
  •   a_horse_with_no_name    7 年前

    标识符 "prestamos_bienes.marcas" is名称 没有 模式限定。

    完全限定名称的每个部分都需要单独引用。

    ALTER TABLE prestamos_bienes.bienes
       ADD CONSTRAINT "bienes_prestamos_bienes.marcas_id_marca_fk"
       FOREIGN KEY (id_marca) REFERENCES "prestamos_bienes"."marcas" (id_marca);
    

    或者最好不要完全引用:

    ALTER TABLE prestamos_bienes.bienes
       ADD CONSTRAINT bienes_marcas_fk
       FOREIGN KEY (id_marca) REFERENCES prestamos_bienes.marcas (id_marca);
    

    一般来说,应该完全避免使用双引号。

    那么,外键名的用途也可能很清楚: "bienes_prestamos_bienes.marcas_id_marca_fk" . 这也是 架构限定名。