Postgres преобразование форматов дат при вставке с помощью триггера

#postgresql #function #triggers

Вопрос:

У меня есть скрипт, который вставит данные в таблицу postgres проблема в том, что данные имеют формат даты ДД/ММ/ГГГГ, и этот стиль даты не принят — я не могу изменить стиль даты, так как это длится только сеанс ( это то, что я читал). У меня есть эта функция и триггер для изменения формата даты, но я получаю значение поля даты/времени ошибки вне диапазона: «ДД/ММ/ГГГГ» может ли кто-нибудь помочь в том, что не так с функцией/триггером, чтобы формат даты заработал Я попробовал несколько итераций этого, и все они дают одну и ту же ошибку

 CREATE OR REPLACE FUNCTION format_date() 
RETURNS TRIGGER 
LANGUAGE plpgsql
AS 
$
BEGIN 
    NEW.Invoice_Date = to_char(NEW.Invoice_Date, 'YYYY-MM-DD')::date;
    NEW.Due_Date = to_char(NEW.Due_Date, 'YYYY-MM-DD')::date;
    NEW.Paid_Date = to_char(NEW.Paid_Date, 'YYYY-MM-DD')::date;

RETURN NEW ;
END;
$

CREATE TRIGGER format_date
BEFORE INSERT ON table_name
FOR EACH ROW 
EXECUTE PROCEDURE format_date();
 

Я пробовал использовать to_date с новым и без него. в пределах to_char, и я попытался заставить его назначить дату ::дата в столбце. Любая помощь будет очень признательна

Комментарии:

1. Если входящие даты будут всегда DD/MM/YYYY , вы можете изменить DateStyle их в postgresql.conf и сделать их «постоянными». to_char(NEW.Invoice_Date, 'YYYY-MM-DD')::date; Вероятно, это должно быть to_date(NEW.Invoice_Date, 'DD/MM/YYYY)::date;

2. Я пытаюсь избежать изменения postgresql.conf, поэтому пытаюсь изменить формат даты

3. Хорошо, если все даты не будут представлены в виде DD/MM/YYYY отформатированных строк, ваш триггер не сработает. Если все они поступят так же, как DD/MM/YYYY и тогда postgresql.conf , изменение сэкономит вам много работы. Есть ли у вас контроль над тем, как они форматируются до их поступления в базу данных?

4. Нет контроля над тем, как они поступают. Я просто знаю, что предпочтительным методом будет тот, при котором изменения в postgresql.conf не требуются

5. Вам не нужно ничего менять postgresql.conf , вы можете изменить это для каждого пользователя alter user ... set datestyle = '...' ;`