Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 675136335D5 for ; Wed, 17 Feb 2010 07:03:29 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 45153-05 for ; Wed, 17 Feb 2010 11:03:09 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from ananke.wxnz.net (ananke.wxnz.net [58.28.4.122]) by mail.postgresql.org (Postfix) with ESMTP id B5190633587 for ; Wed, 17 Feb 2010 07:03:03 -0400 (AST) Received: from gonzo (ip-118-90-135-31.xdsl.xnet.co.nz [118.90.135.31]) by ananke.wxnz.net (Postfix) with ESMTP id 03523400E9 for ; Wed, 17 Feb 2010 23:51:05 +1300 (NZDT) Received: from news by gonzo with local (Exim 4.69) (envelope-from ) id 1NhhUm-0000wJ-LH for pgsql-sql@postgresql.org; Wed, 17 Feb 2010 23:51:04 +1300 To: pgsql-sql@postgresql.org Path: not-for-mail From: Jasen Betts Newsgroups: gmane.comp.db.postgresql.sql Subject: Re: very frustrating feature-bug Date: 17 Feb 2010 10:51:04 GMT Organization: Dis (not Dat) Organisation Lines: 33 Message-ID: References: <4B7B98AF.9050202@bankir.ru> NNTP-Posting-Host: localhost Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: reversiblemaps.ath.cx 1266403864 3586 127.0.0.1 (17 Feb 2010 10:51:04 GMT) X-Face: ?)Aw4rXwN5u0~$nqKj`xPz>xHCwgi^q+^?Ri*+R(&uv2=E1Q0Zk(>h!~o2ID@6{uf8s; a +M[5[U[QT7xFN%^gR"=tuJw%TXXR'Fp~W; (T"1(739R%m0Yyyv*gkGoPA.$b,D.w:z+<'"=-lVT?6 {T?=R^:W5g|E2#EhjKCa+nt":4b}dU7GYB*HBxn&Td$@f%.kl^:7X8rQWd[NTc"P"u6nkisze/Q; 8 "9Z{peQF,w)7UjV$c|RO/mQW/NMgWfr5*$-Z%u46"/00mx-,\R'fLPe.)^ User-Agent: slrn/pre1.0.0-2 (Linux) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.001 tagged_above=-10 required=5 tests=BAYES_50=0.001 X-Spam-Level: X-Archive-Number: 201002/63 X-Sequence-Number: 33662 On 2010-02-17, silly sad wrote: > > acc=> > > CREATE OR REPLACE FUNCTION add_user (TEXT, TEXT, TEXT, TEXT) > RETURNS usr AS $$ > INSERT INTO usr (login,pass,name,email) VALUES ($1,$2,$3,$4) > RETURNING usr.*; > $$ LANGUAGE sql SECURITY DEFINER; > > acc=> > > ERROR: return type mismatch in function declared to return usr > DETAIL: Function's final statement must be a SELECT. > CONTEXT: SQL function "add_user" > > SURPRISE :-) SURPRISE :-) SQL functions are inlined when invoked, and so must be valid subselects. rewrite it in plpgsql. CREATE OR REPLACE FUNCTION add_user (TEXT, TEXT, TEXT, TEXT) RETURNS usr AS $$ DECLARE retval usr; BEGIN INSERT INTO usr (login,pass,name,email) VALUES ($1,$2,$3,$4) RETURNING usr.* INTO retval; RETURN retval; END; $$ LANGUAGE PLPGSQL SECURITY DEFINER;