172 похожих чатов

Приветствую. Подскажите, плиз. Создал таблицу users с полем id. И сделал

у него дефолтное значение: my_function().
Для проверки на уникальность генерации дефолтного значения мне в функции приходится делать запрос к таблице users и к полю id. А для этого приходится прокидывать в функцию название таблицы и поля: my_function('users', 'id').

Вот и появился в связи с этим вопрос - можно ли как-то во время выполнения функции получить контекст - для какого поля какой таблицы она выполняется, чтобы не прокидывать аргументы и оставить my_function() by default?

Что-то типа:
CREATE OR REPLACE FUNCTION my_function() RETURN text AS $$
BEGIN
SELECT 1 FROM current_table WHERE current_column = ...
...
END

8 ответов

6 просмотров

Хм а последовательность то чем не угодила? Или I’d осмысленный?

Vsevolod-Avramov Автор вопроса
Slava Rozhnev SQLtest.online https://phpize.online
trigger function

Ну насколько я понимаю, тригеры нужно навешивать определенные действия. Тут же я говорю о дефолтном значении колонки: CREATE TABLE users ( id integer DEFAULT my_function() CONSTRAINT users_pkey PRIMARY KEY, В случае с триггерами надо делать что-то типа: CREATE TABLE users ( id integer CONSTRAINT users_pkey PRIMARY KEY, ... ) CREATE TRIGGER set_default_users_id BEFORE INSERT OF id ON users FOR EACH ROW EXECUTE FUNCTION my_function(); Мне тут больше нравится всё-таки первый вариант

Vsevolod-Avramov Автор вопроса
Konstantin Zaitsev
Хм а последовательность то чем не угодила? Или I’d...

Ну там что-то типа рандомной строки с префиксом: usr_jsSJWn3282jwnsW

Vsevolod Avramov
Ну там что-то типа рандомной строки с префиксом: u...

А проверять то зачем, если вы сами генеририруете?

Vsevolod-Avramov Автор вопроса

Ну на случай если такая запись уже есть в таблице. Вот сама функция. Проще наверно показать, чем говорить: 5 │ Usage example: 6 │ SELECT prefixed_id_generator(table_name, 'prefix', uniq_column) 7 │ # prefix_jHwn38Nwhs6qP6k 8 │ 9 │ If a prefix is not set, it adds a dash before anyway. 10 │ By default, check the 'id' column. You can redefine it with a third arg. 11 │ */ 12 │ 13 │ CREATE OR REPLACE FUNCTION prefixed_id_generator(tbl_name text, prefix text DEFAULT '', uniq_column text DEFAULT 'id') RETURNS text AS $$ 14 │ DECLARE 15 │ new_id text; 16 │ done bool; 17 │ postfix text; 18 │ BEGIN 19 │ done := false; 20 │ WHILE NOT done LOOP 21 │ postfix := (SELECT string_agg(substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '') 22 │ FROM generate_series(1, 15)); 23 │ new_id := prefix || '_' || postfix; 24 │ EXECUTE format('SELECT NOT exists(SELECT 1 FROM %s WHERE %s=$1)', tbl_name, uniq_column) INTO done USING new_id; 25 │ END LOOP; 26 │ RETURN new_id; 27 │ END; 28 │ $$ LANGUAGE PLPGSQL VOLATILE;

Vsevolod Avramov
Ну на случай если такая запись уже есть в таблице....

Вы вот на каждую вставку выполнять собираетесь код на plogsql Хотя модно в url просто иметь user#102251126

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
падает джоба хотя уже была собрана на соседнем namespace, куда капать? │ │ Copying blob sha256:2fa066caddb8f09a71082b03aa43046f79346a01d9c89e06a1f508bb1207dba5 427 │ │ Copyin...
Andrei St
5
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременног...
🐾
5
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Книга Юрова В.И пойдёт для обучения?
Botsman
24
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
Тут просто дело в том, что я не могу сейчас дать такие подробности из за того что рассчитать это всё нереально. Этого проекта который я хочу сделать ещё даже не существует) И ...
🐾
8
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
Карта сайта