Search Postgresql Archives

Re: Switching from MySQL: ON DUPLICATE KEY UPDATE, plpgsql function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jun 27, 2009 at 08:23:26PM -0400, APseudoUtopia wrote:
- Hey list,
- 
- I'm migrating my site away from MySQL to PostgreSQL. So far, it's been
- going great. However, there's one problem I've been having trouble
- solving.
- 
- I have a query which allows users to "Catch up" on read posts on the
- forum. It works by either updating or inserting the "last post read"
- number from every forum thread into the readposts table (for that
- userid and threadid combination, of course). Here's the table
- structure:
- 
- CREATE TABLE "forums_readposts" (
-  "userid"    INTEGER NOT NULL REFERENCES "users_main" ("id") ON DELETE CASCADE,
-  "threadid"    INTEGER NOT NULL REFERENCES "forums_topics" ("id") ON
- DELETE CASCADE,
-  "lastpostread"   INTEGER NOT NULL CHECK ("lastpostread" >= 0),
-  PRIMARY KEY ("userid", "threadid")
- );
- 
- Here's the original MySQL query that I have (db_string is a php
- function that escapes the string):
- 
- INSERT INTO "forums_readposts" ("userid", "threadid", "lastpostread")
- SELECT ' . db_string($_SESSION['UserInfo']['id']) . ', "id",
- "lastpost" FROM "forums_topics" ON DUPLICATE KEY UPDATE "lastpostread"
- = "lastpost";

So regardless of other design issues. (i.e., assuming what you have was working 
in MySQL).

Wouldn't you just be looking for something like:

BEGIN;
  EXECUTE 'insert into forums_readposts values ('...')';
        EXCEPTION when unique_violation THEN
                EXECUTE 'update forums_readposts set lastpostread = '...' ';
END;

The logic as i read your post is. If the user's never done a "catchup" operation
before, this will create the record. If he has, then it will update this record
to reflect the new transid.

Dave

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux