X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (neptune.hub.org [200.46.204.2]) by svr1.postgresql.org (Postfix) with ESMTP id BD4E7D1D592 for ; Fri, 21 Nov 2003 10:06:36 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (neptune.hub.org [200.46.204.2]) (amavisd-new, port 10024) with ESMTP id 41139-03 for ; Fri, 21 Nov 2003 06:06:07 -0400 (AST) Received: from fzkmail2.fzk.de (fzkmail2.fzk.de [141.52.27.52]) by svr1.postgresql.org (Postfix) with SMTP id 63561D1D59A for ; Fri, 21 Nov 2003 06:06:03 -0400 (AST) Received: FROM resy5.fzk.de BY fzkmail2.fzk.de ; Fri Nov 21 11:05:59 2003 +0100 Received: œby rodos.fzk.de with ESMTP (8.8.6 (PHNE_17135)/8.7.1) id LAA07153; Fri, 21 Nov 2003 11:05:59 +0100 (MET) From: Christoph Haller Message-Id: <200311211005.LAA13146@rodos> Subject: Re: Need another way to do this, my sql much to slow... To: wintrojr@tripos.com (Jerry Wintrode) Date: Fri, 21 Nov 2003 11:05:57 MET Cc: pgsql-sql@postgresql.org In-Reply-To: <4E676B0AAF74B443A18D7BC7AAB3CFFD1D44D8@s01-exch01.tripos.com>; from "Jerry Wintrode" at Nov 21, 103 12:30 (midnight) X-Mailer: Elm [revision: 212.4] X-Virus-Scanned: by amavisd-new at postgresql.org X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char 9C hex) in message header 'Received' Received: \234by rodos.fzk.de... ^ X-Archive-Number: 200311/257 X-Sequence-Number: 16072 > > Ok, I figured that part out by simply changing the way I'm doing to > query, and writing a function to handle the reply. But it will introduce > another problem. How to I pass special characters, any character, to a > function like this: > > select msg_2_env('"Ann's Free Gifts & Coupons" > '); > > As you can see the message from name is: > "Ann's Free Gifts & Coupons" server1@mail03a-free-gifts.mx07.com > > I need that whole string to match. Including the ",&,@, and yes the > single quote in Ann's. Passed as a variable this should not be a > problem, I think, but how do I test this on the command line with psql? > > Oh, here is the simple function in case anyone cares to have it...very > simple. Now processing about 100000 records takes 1ms. Down from the > 12-15 seconds. WooHoo. Just that other little issue..hehehe. > > CREATE FUNCTION msg_2_env (text) RETURNS int4 AS > ' > DECLARE > intext ALIAS FOR $1; > result int4; > > BEGIN > > result := ( SELECT count(DISTINCT > record_of_claims.msg_sender_num) AS mclaim_count FROM record_of_claims > WHERE (record_of_claims.env_sender_num = (SELECT > env_from_senders.env_sender_num FROM env_from_senders WHERE > (env_from_senders.envelope_from = intext::character varying))) GROUP BY > record_of_claims.env_sender_num ); > > RETURN result; > > END; > ' LANGUAGE 'plpgsql'; > > Jerry Wintrode > Network Administrator > Tripos, Inc. > The only character you have to care about is the single quote. Do: select msg_2_env('"Ann''s Free Gifts & Coupons" '); One more thing: As COUNT returns a bigint my coding would be .. result bigint; .. Regards, Christoph