Postgresql bir süre önce enum desteği aldı.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Bir sorgu ile numaralandırma belirtilen tüm değerleri nasıl alabilirim?
Postgresql bir süre önce enum desteği aldı.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Bir sorgu ile numaralandırma belirtilen tüm değerleri nasıl alabilirim?
Yanıtlar:
Bir dizi istiyorsanız:
SELECT enum_range(NULL::myenum)
Numaralandırmadaki her öğe için ayrı bir kayıt istiyorsanız:
SELECT unnest(enum_range(NULL::myenum))
Numaralandırma varsayılan şemada olmasa bile bu çözüm beklendiği gibi çalışır. Örneğin, yerine myenum
ile myschema.myenum
.
Yukarıdaki sorguda döndürülen kayıtların veri türü olacaktır myenum
. Ne yaptığınıza bağlı olarak metne yayın yapmanız gerekebilir. Örneğin
SELECT unnest(enum_range(NULL::myenum))::text
Sütun adını belirtmek isterseniz, ekleyebilirsiniz AS my_col_name
.
Cevabıma dahil ettiğim bazı ek ipuçlarına dikkat çektiği için Justin Ohms'a teşekkür ederiz.
NULL::
?
SELECT enum_range(myenum)
? Dökümün anlamı nedir null
?
Deneyin:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
sorguyu ekleyin . Numaralandırma türüne BEFORE
veya değerleri kullanılarak yeni değerler eklenirse, numaralandırılmış değerler büyük olasılıkla bozuk olacaktır AFTER
.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Bu, "your_enum" numaralandırma içeriğinin tek bir sütun sonuç kümesi türünde "your_column" adlı bir sütunla döner.
Aşağıdaki sorguyu kullanarak bir numaralandırma için tüm numaralandırma değerlerini alabilirsiniz. Sorgu, numaralandırmanın hangi ad alanında da yaşadığını seçmenize izin verir (numaralandırma birden çok ad alanında tanımlanırsa gereklidir; aksi takdirde sorgunun bu bölümünü atlayabilirsiniz).
SELECT enumlabel
FROM pg_enum
WHERE enumtypid=(SELECT typelem
FROM pg_type
WHERE typname='_myenum' AND
typnamespace=(SELECT oid
FROM pg_namespace
WHERE nspname='myschema'))