X-Original-To: pgsql-patches-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id A0F2D5282E for ; Sun, 7 Aug 2005 00:25:43 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 79905-03 for ; Sun, 7 Aug 2005 03:25:31 +0000 (GMT) Received: from mail.Mi8.com (d01gw01.mi8.com [63.240.6.47]) by svr1.postgresql.org (Postfix) with ESMTP id 5676652AE0 for ; Sun, 7 Aug 2005 00:25:29 -0300 (ADT) Received: from 172.16.1.110 by mail.Mi8.com with ESMTP (- Welcome to Mi8 Corporation www.Mi8.com (D1)); Sat, 06 Aug 2005 23:25:24 -0400 X-Server-Uuid: 241911D6-425B-44B9-A073-E3FE0F8FC774 Received: from MI8NYCMAIL06.Mi8.com ([172.16.1.175]) by D01SMTP01.Mi8.com with Microsoft SMTPSVC(6.0.3790.211); Sat, 6 Aug 2005 23:25:24 -0400 Received: from 24.5.173.15 ([24.5.173.15]) by MI8NYCMAIL06.Mi8.com ( [172.16.1.219]) via Exchange Front-End Server mi8owa.mi8.com ( [172.16.1.106]) with Microsoft Exchange Server HTTP-DAV ; Sat, 6 Aug 2005 23:25:24 -0500 User-Agent: Microsoft-Entourage/11.1.0.040913 Date: Sat, 06 Aug 2005 20:25:24 -0700 Subject: Re: COPY FROM performance improvements From: "Luke Lonergan" To: "PostgreSQL-patches" Message-ID: In-Reply-To: <26467.1123362292@sss.pgh.pa.us> MIME-Version: 1.0 X-OriginalArrivalTime: 07 Aug 2005 03:25:24.0531 (UTC) FILETIME=[A62E3030:01C59AFF] X-WSS-ID: 6EEBA0AE2B414362915-01-01 Content-Type: multipart/mixed; boundary=B_3206204724_2604846 X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=1.592 tagged_above=0 required=5 tests=AWL, FORGED_RCVD_HELO, RCVD_NUMERIC_HELO X-Spam-Level: * X-Archive-Number: 200508/49 X-Sequence-Number: 16996 > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3206204724_2604846 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Tom, My direct e-mails to you are apparently blocked, so I'll send this to the list. I've attached the case we use for load performance testing, with the data generator modified to produce a single row version of the dataset. I do believe that you/we will need to invert the processing loop to get the maximum parsing speed. We will be implementing much higher loading speeds which require it to compete with Oracle, Netezza, Teradata, so we'll have to work this out for the best interests of our users. - Luke --B_3206204724_2604846 Content-Type: application/octet-stream; name=IVP.tgz Content-Disposition: attachment; filename=IVP.tgz Content-Transfer-Encoding: base64 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 --B_3206204724_2604846--