X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id 251479DD59F for ; Wed, 22 Mar 2006 11:50:05 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 80821-03 for ; Wed, 22 Mar 2006 11:50:09 -0400 (AST) Received: from svr4.postgresql.org (svr4.postgresql.org [66.98.251.159]) by postgresql.org (Postfix) with ESMTP id 268B39DC837 for ; Wed, 22 Mar 2006 11:29:52 -0400 (AST) Received: from linspr1.tempdomainname.com (linspr1.tempdomainname.com [161.58.246.140]) by svr4.postgresql.org (Postfix) with ESMTP id D37AB5AF8AD for ; Wed, 22 Mar 2006 15:29:57 +0000 (GMT) Received: from [192.168.2.5] (ip-216-73-188-2.hqglobal.net [216.73.188.2]) (authenticated bits=0) by linspr1.tempdomainname.com (8.12.11/8.12.11) with ESMTP id k2MFToUj013545 for ; Wed, 22 Mar 2006 08:29:55 -0700 (MST) From: ashah Organization: opus To: pgsql Subject: Massive Inserts Strategies Date: Wed, 22 Mar 2006 10:32:10 -0500 User-Agent: KMail/1.8.2 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200603221032.10207.ashah@opuspro.com> X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=0 required=5 tests=[none] X-Spam-Score: 0 X-Spam-Level: X-Archive-Number: 200603/457 X-Sequence-Number: 17894 I have a database with foreign keys enabled on the schema. I receive different files, some of them are huge. And I need to load these files in the database every night. There are several scenerios that I want to design an optimal solution for - 1. One of the file has around 80K records and I have to delete everything from the table and load this file. The provider never provides a "delta file" so I dont have a way to identify which records are already present and which are new. If I dont delete everything and insert fresh, I have to make around 80K selects to decide if the records exist or not. Now there are lot of tables that have foreign keys linked with this table so unless I disable the foreign keys, I cannot really delete anything from this table. What would be a good practise here? 2. Another file that I receive has around 150K records that I need to load in the database. Now one of the fields is logically a "foreign key" to another table, and it is linked to the parent table via a database generated unique ID instead of the actual value. But the file comes with the actual value. So once again, I have to either drop the foreign key, or make 150K selects to determine the serial ID so that the foreign key is satisfied. What would be a good strategy in this scenerio ? Please pardon my inexperience with database ! Thanks, Amit