2017-02-27 1 views
0

Imaginons que je crée deux tables dans Postgres avec UUID comme PRIMARY KEY. Ces UUID sont générés à l'aide du module uuid-ossp dans Postgres: https://www.postgresql.org/docs/9.5/static/uuid-ossp.htmlComparaison d'UUID dans postgres

CREATE TABLE f( 
    idFoo UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
    foo TEXT 
); 

CREATE TABLE b (
    idBar UUID, 
    bar text, 
    FOREIGN KEY (idBar) REFERENCES foo(idFoo) 
); 

Je veux ensuite créer une vue basée sur les deux tableaux ci-dessus:

CREATE OR REPLACE VIEW foobar AS (
    SELECT fooid, barid 
    FROM foo, bar 
    WHERE f.idFoo = b.idBar 
    -- AND some other condition -- 
); 

Question: Comment puis-je comparer le UUID les types?

Répondre

1

Ne comparez pas UUID, vous cherchez à vous joindre sur eux:

CREATE OR REPLACE VIEW foobar AS (
    SELECT f.foo, b.bar, f.id 
    FROM f JOIN b USING (id) 
    WHERE -- some other condition -- 
); 

Pour vous joindre sur différentes colonnes, vous pouvez:

CREATE OR REPLACE VIEW foobar AS (
    SELECT f.foo, b.bar, idFoo, idBar 
    FROM f JOIN b ON (idFoo = idBar) 
    WHERE -- some other condition -- 
); 

(Bien sûr, parce que idFoo = Idbar , il n'y a pas besoin d'inclure les deux dans votre deuxième sélection).

+0

Qu'en est-il du cas où le 'PRIMARY KEY' est nommé différent (mis à jour la question)? – armundle

+0

@armundle, j'ai mis à jour ma réponse. – pbuck