integer, property_2 text);
CREATE TABLE example {
id bigserial PRIMARY KEY,
something integer NOT NULL,
some_array_of_things thing[],
};
Я хочу чтобы оба поля элементов массива some_array_of_things были не пустые, т.е. что-то типа:
CREATE TYPE wanted AS (wanted_type integer NOT NULL, reason text NOT NULL);
Подскажите как этого добиться?
Кажется есть вариант сделать это через CHECK но я не понимаю как именно, а вообще хотелось бы более красивое решение
А почему ты не хочешь просто ещё одну таблицу добавить с тремя колонками Зачем эти костыли с массивом кастомного типа
Ну, через check-то чего там делать -- берёшь и пишэшь функцыю проверки, прямо по учебнику.
Какие плюсы в таком способе помимо того что это проще сделать? Есть плюсы по перфомансу какие-либо? Кажется только хуже
Но вообще да -- лучшэ несколько раз подумать перед тем, как вот так вот взять и наплевать на 1НФ. Уж на что я их нелюблю -- но, честно, вот чтобы уж на 1-ую забивать нужны какие-то веские основания -- и вряд ли они у вас достаточно веские.
Ну если добавить вторую таблицу то нужно делать будет 2 запроса вместо 1
Мда. То есть нет. То есть можэт быть, но скорее всего ты сейчас пишэшь нерелевантные вещи.
Ну хотя в целом да, можно транзакцией в один запрос
Я непонимаю о чём вы -- но уверяю, что можно и просто одним запросом.
Вообще, вот этот вариант CREATE TYPE с recordами -- он в первую очередь чтобы аргументы функцыям передавать правильно/удобно. И возвращать тожэ из функцый что-нибудь. Вставлять это в таблицы можно, если очень хочется -- но не очень принято как-то. И не очень нужно.
Обсуждают сегодня