2017-10-06 2 views
1

Voici le SQL:Pourquoi Postgres me dit que les références de bases de données croisées ne sont pas disponibles lorsque les deux tables sont sur la même base de données?

CREATE TABLESPACE fnord1 location '/tmp/fnord1'; 
CREATE TABLESPACE fnord2 location '/tmp/fnord2'; 

CREATE SCHEMA IF NOT EXISTS fnord; 

DROP TABLE IF EXISTS fnord.shea; 
DROP TABLE IF EXISTS fnord.wilson; 

CREATE TABLE fnord.shea (
    id text not null, 

    CONSTRAINT fnord_shea_id PRIMARY KEY (id) USING INDEX TABLESPACE fnord2 
) TABLESPACE fnord1; 

CREATE TABLE fnord.wilson (
    thing  text not null, 
    shea_id  bigserial not null, 

    CONSTRAINT fnord_wilson_id PRIMARY KEY (thing, shea_id) USING INDEX TABLESPACE fnord2, 
    CONSTRAINT fnord_wilson_shea_fkey FOREIGN KEY (shea_id) REFERENCES fnord.shea.id 
) TABLESPACE fnord1; 

Cela échoue en raison de la déclaration clé étrangère, avec

ERROR: cross-database references are not implemented: "fnord.shea.id"

Mais ... ce sont dans la même base de données, sont-ils pas? Si non, quelle est la bonne façon de les obtenir dans la même base de données?

Répondre

0

Utilisation schema.table_name(column_name):

CONSTRAINT fnord_wilson_shea_fkey FOREIGN KEY (shea_id) REFERENCES fnord.shea.id 

à

CONSTRAINT fnord_wilson_shea_fkey FOREIGN KEY (shea_id) REFERENCES fnord.shea(id) 
+0

ahhh, c'est là où je suis allé mal. J'ai eu quelques exemples mais je ne me suis pas rendu compte que c'était une colonne, plutôt qu'une autre sorte de syntaxe. –