2016-06-24 5 views
2

Gibt es eine Möglichkeit, die einzelnen Attribute einer benutzerdefinierten typisierten Spalte in PostgreSQL über einen Tabellenalias auszuwählen? Ohne einen Tabellenalias zu verwenden, funktioniert das Umbrechen des Spaltennamens in Parens einwandfrei. Sobald ein Tabellenalias eingeführt wird, schlägt meine Abfrage mit einem Syntaxfehler fehl.Wie wählen Sie Attribute eines benutzerdefinierten Typs über einen Tabellenalias aus?

Ich habe den Postgres docs abgekocht und nicht in der Lage, etwas zu finden darstellen, wie dies zu erreichen. Sicherlich ist das möglich?

CREATE TYPE test_type AS (
    some_text TEXT, 
    some_number INTEGER 
); 

CREATE TABLE test_table (
    id SERIAL PRIMARY KEY, 
    some_test test_type NOT NULL 
); 

INSERT INTO test_table (some_test) 
VALUES (ROW('SOME TEXT', 42)); 

-- This works great 

SELECT id, (some_test).some_text, (some_test).some_number 
FROM test_table; 
┌────┬───────────┬─────────────┐ 
│ id │ some_text │ some_number │ 
├────┼───────────┼─────────────┤ 
│ 1 │ SOME TEXT │   42 │ 
└────┴───────────┴─────────────┘ 

Sobald der Tabelle alias eingeführt wird Sie nicht die einzelne Attribute aus dem benutzerdefinierten getippt

Spalte SELECT kann
SELECT id, x.(some_test).some_text, x.(some_test).some_number 
FROM test_table AS x; 

ERROR: syntax error at or near "(" 
LINE 1: select id, x.(some_test).some_text, x.(some_test).some_numbe... 
        ^

Antwort

2

Sie müssen um die Kombination die Klammern setzen von Alias ​​und Spalte:

SELECT id, (x.some_test).some_text, (x.some_test).some_number 
FROM test_table x; 
Verwandte Themen