Получение Postgres для усечения значений, если это необходимо? - PullRequest
3 голосов
/ 12 февраля 2010

Если я создам таблицу mytable со столбцом data как varchar(2), а затем вставлю в столбец что-то вроде '123', postgres выдаст мне ошибку для значения слишком длинного для типа.

Как Postgres может игнорировать это и урезать значение при необходимости?

Кроме того, я не знаю (при создании запроса) фактический размер столбца data в mytable, поэтому я не могу просто привести его.

Ответы [ 4 ]

7 голосов
/ 12 февраля 2010

Согласно документации postgres , вы должны явно привести его к действию, поскольку возвращение ошибки является требованием стандарта SQL. Нет ли способа проверить схему таблицы перед созданием запроса, чтобы узнать, к чему ее привести?

1 голос
/ 10 декабря 2012

Самый простой это просто подстрока

INSERT INTO mytable (data) VALUES (substring('123' from 1 for 2));
1 голос
/ 12 февраля 2010

Вместо этого используйте тип текста с триггером:

create table mytable (
  data text
);

create or replace function mytable_data_trunc_trigger()
  returns trigger language plpgsql volatile as $$
begin
  NEW.data = substring(NEW.data for 2);
  return NEW;
end;
$$;

create trigger mytable_data_truncate_trigger
  before insert or update on mytable for each row
  execute procedure mytable_data_trunc_trigger();

insert into mytable values (NULL),('1'),('12'),('123');

select * from mytable;
<i>
 data 
------

 1
 12
 12
(4 rows)
</i>
0 голосов
/ 12 февраля 2010

Вы можете изменить тип данных на varchar, а затем использовать триггер для принудительного ограничения двух символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...