Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id 0AD086338A5 for ; Wed, 28 Apr 2010 17:04:25 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 06674-08 for ; Wed, 28 Apr 2010 20:04:18 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-qy0-f196.google.com (mail-qy0-f196.google.com [209.85.221.196]) by mail.postgresql.org (Postfix) with ESMTP id DD7A2633F1A for ; Wed, 28 Apr 2010 17:04:17 -0300 (ADT) Received: by qyk34 with SMTP id 34so1041142qyk.10 for ; Wed, 28 Apr 2010 13:04:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=8Qq99EJZhk7W+78nhu2reqImxoK+vnVYYCB6y0EuWK4=; b=bwCkPz0IlKzMgfVtr7EVbTKn3qr+yzezf5NKQRGRdU5ae9Ps39rqpJU2dDLQvLcSBG tj56lCOD84M+Y2JhwazYxU9SkgsJmxb25VJgwAOX6PGvxqHlEMJPllr2UxzAkFRbedMl WgDcbbMYRgmR3X21L3AaMvk2s0uGWFAHI7qBY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=narLm2yyrxI1Vq03hDHD5/1rxzTh5UlAizQH4wGhH8ccyMzZKDBWNqDMynbF5j9TEw E83oyjuYRVwofTckX7A32pye+YvxdUDeby5tDiS1Ftlu4o+Mz85OIPWeP3uR8IEGepJj lsK+g287cVSQseAzI+UT20K4S3/A8Jk6E4iXc= MIME-Version: 1.0 Received: by 10.229.242.3 with SMTP id lg3mr4927113qcb.102.1272485051650; Wed, 28 Apr 2010 13:04:11 -0700 (PDT) Received: by 10.229.246.139 with HTTP; Wed, 28 Apr 2010 13:04:11 -0700 (PDT) In-Reply-To: <4BD88686.7070005@magwerks.com> References: <20335.1272474358@sss.pgh.pa.us> <4BD88686.7070005@magwerks.com> Date: Wed, 28 Apr 2010 16:04:11 -0400 Message-ID: Subject: Re: Inserting Multiple Random Rows From: Gary Chambers To: Justin Graf Cc: pgsql-sql@postgresql.org Content-Type: text/plain; charset=ISO-8859-1 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.801 tagged_above=-10 required=5 tests=BAYES_50=0.8, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001 X-Spam-Level: X-Archive-Number: 201004/107 X-Sequence-Number: 34034 Justin (et al), > You now what might work In the interest of efficiency, I abandoned the quest for the perfect query and wrote my own function and used a modified version of depesz's get_random_id() function: CREATE OR REPLACE FUNCTION gen_fake_addresses() RETURNS INTEGER AS $gen_fake_addresses$ DECLARE v_uid BIGINT; v_cid INTEGER; v_cst RECORD; v_count BIGINT := 0; BEGIN FOR v_uid IN SELECT userid FROM users WHERE userid NOT IN (SELECT userid FROM useraddrs) LOOP SELECT INTO v_cid get_random_city(); SELECT INTO v_cst cityname, stateabbr FROM cities WHERE cid = v_cid; INSERT INTO useraddrs(userid, addrdesc, city, stprov) VALUES (v_uid, 'Home', v_cst.cityname, v_cst.stateabbr); v_count := v_count + 1; END LOOP; RETURN v_count; END; $gen_fake_addresses$ LANGUAGE plpgsql VOLATILE; /* This is depesz's */ CREATE OR REPLACE FUNCTION get_random_city() RETURNS INT4 AS $get_random_city$ DECLARE id_range RECORD; reply INT4; try INT4 := 0; BEGIN SELECT min(cid), max(cid) - min(cid) + 1 AS range INTO id_range FROM cities; WHILE (try < 10) LOOP try := try + 1; reply := FLOOR(RANDOM() * id_range.range) + id_range.min; PERFORM cid FROM cities WHERE cid = reply; IF FOUND THEN RETURN reply; END IF; END LOOP; RAISE EXCEPTION 'No record found in % tries', try; END; $get_random_city$ LANGUAGE plpgsql STABLE; I'd like to thank Justin Graf for his time, effort, and assistance with this problem. -- Gary Chambers /* Nothing fancy and nothing Microsoft! */