Как узнать количество строк, возвращаемых в функции postgres?

#postgresql #postgresql-9.5

Вопрос:

В следующем SQL мне нужно проверить, возвращено ли более одной записи из предложения select.

_персонал.длина не работает, между тем, я не могу выбрать count(*) в другую переменную. Как мне узнать, сколько строк вернулось в поле «Выбрать»?

 create or replace function search_users(partial_name text) returns setof text as $ declare  _person record; begin  select * into _person   from users  where name ~ partial_name;   if not found then  return next 'No matching user';  elsif _person.length gt; 1 then  return next 'Ambiguous user name';  else  return next _person.name;  end if; end; $ language plpgsql;  

Ответ №1:

Если ваш запрос возвращает более одной строки, вы получите сообщение об ошибке из-за INTO _person предложения, которое не может получить набор записей. Вместо этого вы можете объединить полученные строки в массив, а затем проверить длину массива :

 create or replace function search_users(partial_name text) returns text as $ declare  _person text[] ; begin  select string_agg(name) into _person   from users  where name ~ partial_name;   if not found then  return next 'No matching user';  elsif array_length(_person, 1) gt; 1 then  return next 'Ambiguous user name';  else  return next _person[1] ;  end if; end; $ language plpgsql;