RE: mysql's "replace into..." - Mailing list pgsql-sql
From | Diehl, Jeffrey |
---|---|
Subject | RE: mysql's "replace into..." |
Date | |
Msg-id | B51F0C636E578A4E832D3958690CD73E0130BE4C@es04snlnt Whole thread Raw |
In response to | mysql's "replace into..." ("Diehl, Jeffrey" <jdiehl@sandia.gov>) |
List | pgsql-sql |
Thanx for your help. I found replace into to be a nice convience since my primary keys are often expressions build from several fields which I want to keep unique. Replace into enforces this uniqueness. I was learning SQL when I started this project so I didn't know this was non-standard. Bummer. But since my primary keys are expressions, I can't use the technique you suggested. I'm thinking of simply trying the insert and checking to see if I get an error. If I get an error, I do an update... Not sure how well this will work, tho. Any suggestions? Thanx for your time. -----Original Message----- From: Josh Berkus To: Diehl, Jeffrey Cc: 'pgsql-sql@postgreSQL.org' Sent: 2/28/01 12:56 PM Subject: Re: [SQL] mysql's "replace into..." Jeff, > I'm in the process of migrating a production database and related > applicatoins from mysql to postgresql. I've just not been very impressed > with mysql's stability, that is I'm trying to make my phone stop ringing. Surprising. I have a number of gripes with MySQL (of which REPLACE INTO is one), but stability isn't one of them. > However, when I wrote the applications, I took free advantage of mysql's > replace into feature which behaves like a smart insert that inserts new > records or updates old records. I'm using perl DBI and need to figure out a > good way to migrate this to postgresql. > > Any ideas? Well, you have two choices. One is to get used to standard SQL and use the SQL I will expound below. The other is to actually hire a C programmer to modify the PostgreSQL source to support Replace Into. Great Bridge might be willing to help. Regardless, your SQL functionality requires the following steps: 1. All tables involved *must* have primary keys. I reccommend against using the OID for this purpose for several reasons; see the archives for a discussion. 2. Build an if-then stucture for your update calls, that goes like this (this assumes that your primary key is SERIAL): IF primarykey_variable = 0 THENINSERT INTO table1 (field1, field2, field3)VALUES (variable1, variable2, variable3); ELSEUPDATE table1 SET field1 = variable1, field2 = variable2, field3 = variable3WHERE primarykey = primarykey_variable; END IF; -Josh Berkus -- ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete informationtechnology josh@agliodbs.com and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco