Thread: Bad copy-n-paste on character conversion fix - how screwed am I?

Bad copy-n-paste on character conversion fix - how screwed am I?

From
"C. Bensend"
Date:
Hey folks,

   I just had a copy-n-paste mishap on one of my databases, while
fixing the character conversion problem.

   The following erroneous command was entered:

UPDATE pg_proc SET proacl = '{=}'
;

   .. instead of the correct one (missing the WHERE clause).  It
updated 1747 rows - oh crap.

   This is 8.0.2 running on OpenBSD 3.5-STABLE.  Is there a way to
fix what I've just borked?  I'm not even real sure what damage I've
just done...

   Any help would be appreciated.  :)

Benny


--
"You come from a long line of scary women."     -- Ranger, "Three To
                                                   Get Deadly"


"C. Bensend" <benny@bennyvision.com> writes:
>    The following erroneous command was entered:
> UPDATE pg_proc SET proacl = '{=}'
> ;
>    .. instead of the correct one (missing the WHERE clause).  It
> updated 1747 rows - oh crap.

Always a good idea to do this kind of thing inside a BEGIN block ;-)

As far as the system functions are concerned, you can just set the
proacl column to NULL (ie, default) and that'll be fine for everything
except the character conversion functions.

As far as user-defined functions are concerned, NULL probably works for
most of them too, but you would want to consult a recent backup to see
if any were not like that.

            regards, tom lane

Re: Bad copy-n-paste on character conversion fix - how

From
"C. Bensend"
Date:
> Always a good idea to do this kind of thing inside a BEGIN block ;-)

Yeah.  That was the _second_ thing that came to mind.  ;)

> As far as the system functions are concerned, you can just set the
> proacl column to NULL (ie, default) and that'll be fine for everything
> except the character conversion functions.

So, just to be sure:

1)  Start a %(&@#*(&% transaction
2)  Set the column to NULL for all rows, undoing my stupidity
3)  Issue the CORRECT SQL statement, and that will take care of the
    character conversion problem
4)  COMMIT said transaction after verifying that I'm not doing
    something stupid _again_

Is this correct?

> As far as user-defined functions are concerned, NULL probably works for
> most of them too, but you would want to consult a recent backup to see
> if any were not like that.

Happily, I am a novice at this, and I do not have any user-defined
functions.  Very simple database.  :)

Thank you so much!

Benny


--
"You come from a long line of scary women."     -- Ranger, "Three To
                                                   Get Deadly"


Re: Bad copy-n-paste on character conversion fix - how

From
Tom Lane
Date:
"C. Bensend" <benny@bennyvision.com> writes:
> So, just to be sure:

> 1)  Start a %(&@#*(&% transaction
> 2)  Set the column to NULL for all rows, undoing my stupidity
> 3)  Issue the CORRECT SQL statement, and that will take care of the
>     character conversion problem
> 4)  COMMIT said transaction after verifying that I'm not doing
>     something stupid _again_

> Is this correct?

Right.

All this thrashing will have bloated pg_proc a bit (like a factor of
three...) so you might want to do a "VACUUM FULL pg_proc" after the dust
has settled.  But that's a bit on the anal-retentive side considering
that pg_proc isn't really all that big.  I offer it up merely for
educational purposes.

            regards, tom lane