issue with perform

From: Yury Peskin <ypeskin(at)cycle-inc(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: issue with perform
Date: 2012-09-18 18:45:15
Message-ID: C0AB4D30-CCAA-4F08-91FC-F6F1B01CA890@cycle-inc.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Hello,
Environment:

Postgresql: 9.1.5
OS: CentOS 64bit 6.3(final)

Problem:

ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function "nm_create_friend" line 3 at SQL statement
SQL statement "SELECT NM_create_friend($1, friend_id)"
PL/pgSQL function "nm_create_friends" line 9 at PERFORM

and here's the actual function:
CREATE FUNCTION nm_create_friends(user_id uuid, friend_ids text[]) RETURNS void
LANGUAGE plpgsql
AS $_$
DECLARE
friend_id text;
BEGIN
FOREACH friend_id in array $2
LOOP
PERFORM NM_create_friend($1, friend_id); <--- this is the error line
END LOOP;
END;
$_$;

Just in case here's the function that gets called:

CREATE FUNCTION nm_create_friend(user_id uuid, friend_id text) RETURNS void
LANGUAGE plpgsql
AS $_$
BEGIN
SELECT f.friend_id
FROM
friends AS f
WHERE f.user_id = $1 AND f.friend_id = $2;
IF NOT FOUND THEN
INSERT INTO friends (user_id, friend_id) values($1,$2);
END IF;
END;
$_$;

For some reason, psql thinks that PERFORM NM_create_friend($1, friend_id); function is using a SELECT. Any ideas on how to fix this issue?
Yury Peskin
Director of IT Services
8711 Lyndale Ave S.
Bloomington, MN 55420
http://www.cycle-inc.com

Browse pgsql-novice by date

  From Date Subject
Next Message Yury Peskin 2012-09-18 18:47:37 Issue with PERFORM
Previous Message Sami Pietilä 2012-09-16 17:17:03 Re: Creating a DB