On Wed, May 6, 2009 at 7:22 AM, Asko Oja <asc...@gmail.com> wrote:
> It was just yesterday when i wondering why we don't have this feature (i was
> trying to use it and it wasn't there :).
> The group of people who think it's unsafe should not use the feature.
> Clearly this feature would be useful when managing large amounts of servers
> and would simplify our release process.
>
> On Wed, May 6, 2009 at 5:13 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
[...]
>> Yes, I did.  I'm not any more convinced than I was before.  In
>> particular, the example you give is handled reasonably well without
>> *any* new features, if one merely ignores "object already exists"
>> errors.
>
> It sounds pretty amazing. Ignoring errors as a suggested way to use
> PostgreSQL.
> We run our release scripts inside transactions (with exception of concurrent
> index creation). So if something unexpected happens we are left still in
> working state.
> PostgreSQL ability to do DDL changes inside transaction was one of biggest
> surprises/improvements when switching from Oracle. Now you try to bring us
> down back to the level of Oracle :)

Hm, You can do it easily today with help of PL/PgSQL, say like this:

CREATE OR REPLACE FUNCTION foo_upgrade() RETURNS VOID AS $$
BEGIN
  BEGIN
    CREATE TABLE foo(i int, t text);
  EXCEPTION
    WHEN duplicate_table THEN RAISE NOTICE 'Table foo already exists';
  END;
  BEGIN
    ALTER TABLE foo ADD COLUMN t text;
  EXCEPTION
    WHEN duplicate_column THEN RAISE NOTICE 'Column foo.t already exists';
  END;
END;

...the only drawback is that you need to have PL/PgSQL installed. :-)



Personally I don't like 'CREATE IF NOT EXISTS'.  I find it 'messy'. :-)

What I wish PostgreSQL would have is ability to do "conditional
rollback to savepoint".
This way one could write a PostgreSQL SQL script that would contain conditional
behaviour similar to exceptions handling above.  For instance backend could
handle sort of EXCEPTION clause:

SAVEPOINT create_foo;
CREATE TABLE foo(i int, t text);

START EXCEPTION WHEN duplicate_table;
  -- if there was duplicate_table exception, all
  -- commands within this block are executed.
  -- if there was no error, all commands are
  -- ignored, until we reach 'END EXCEPTION;'
  -- command.
  ROLLBACK TO create_foo;
  ALTER TABLE foo ADD COLUMN t text;
END EXCEPTION;

...or some \conditional commands at psql client side.

Just my 0.02 :)

   Best regards,
        Dawid
-- 
  ..................        ``The essence of real creativity is a certain
 : *Dawid Kuroczko* :         playfulness, a flitting from idea to idea
 : qne...@gmail.com :     without getting bogged down by fixated demands.''
 `..................'  Sherkaner Underhill, A Deepness in the Sky, V. Vinge

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

Reply via email to