Re: playing with catalog tables limits? dangers? was: seq bug 2073 and time machine - Mailing list pgsql-general

From Joris Dobbelsteen
Subject Re: playing with catalog tables limits? dangers? was: seq bug 2073 and time machine
Date
Msg-id 48B30EC0.8080904@familiedobbelsteen.nl
Whole thread Raw
In response to Re: playing with catalog tables limits? dangers? was: seq bug 2073 and time machine  (Ivan Sergio Borgonovo <mail@webthatworks.it>)
Responses Re: playing with catalog tables limits? dangers? was: seq bug 2073 and time machine  (Ivan Sergio Borgonovo <mail@webthatworks.it>)
List pgsql-general
Ivan Sergio Borgonovo wrote, On 25-Aug-2008 18:48:
> On Mon, 25 Aug 2008 12:07:23 -0400
> Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
>> Ivan Sergio Borgonovo <mail@webthatworks.it> writes:
>>> Alvaro Herrera <alvherre@commandprompt.com> wrote:
>>>> If you're feeling corageous, you can remove the pg_depend
>>>> entries for that sequence.  Make sure to try it in a
>>>> transaction and drop
>>> I'd like to understand better the risks of being courageous?
>>> I think my life would be easier if I'd know when it is safe to
>>> put hands in the system tables.
>> Well, it's safe if (a) you know what you're doing, (b) you don't
>> make any mistakes, and (c) you don't forget any changes needed to
>> keep all the catalogs consistent.
>>
>> You can protect yourself against (b) by using a transaction, but
>> the other two tend to require hacker-grade knowledge of how the
>> backend works, so we try to discourage people from doing it.
>
> Why hacker-grade knowledge of the backend?
> With "hacker-grade" you mean: undocumented or RTSL?

The issue is that 'directly editing the system tables' has NO safety net
to protect you. You can do everything, even causing assumptions that the
software will make to become invalid. In general this causes any
combination of data corruption, server crashes and/or other bad things.

The 'regular interface', that you will find in the documentation,
ensures that the assumptions remain valid. It will not allow changes
that cause these assumption to become invalid.
(As a side note: you might see conditions where the assumption are
violated when using the regular interface: these will be called bugs).

Most of the assumptions are undocumented, but if they happen to be
documented, there is little reason to actually assume they will remain
valid over different versions (even between e.g. 8.3 and 8.3.1, though
that will probably happen, but for other reasons). They are not intended
to be used by regular users, rather by the system itself.

What Tom calls "hacker-grade" knowledge is that you know what the
assumptions are and how you can ensure that you will not violate them.
In general, several hackers that work with the system catalogs, probably
know quite a few of them. Its not something that the DBA should know,
the commands in the documentation will provide that kind of protection.

> Isn't the knowledge about how catalog stuff maps on SQL to "guess"
> how to achieve certain results?

This "maps" is dependent on the actual implementation you are running.
(I did have trouble understanding the actual question here).

>> pg_depend in particular tends to have rather obscure contents,
>> and what's worse is that messing it up usually doesn't have any
>> immediately-obvious consequences.
>
> OK... what about concurrent works?
> eg. supposing I write the correct SQL should I take care to be the
> only one accessing the DB in that moment?

Depends on what you are doing. This is an instance what the regular
interface enforces. For safety, its probably a good idea to be the only
one, but its not a requirement.

> What could be the use case of directly accessing the catalog?

Ideally, NONE!

However there are cases where strange and unexpected things happen and
editing the catalog directly can get the database server back into a
proper/consistent state. You seem to have encountered such a situation.

The main reason for having the option to enable 'direct catalog access'
is to allow developers to add or modify features and test them while
they are partially implemented. For example, the feature exists in the
backend, but no-one implemented a command to actually turn it on or
modify its parameters. This way the feature can already be tested, while
they are discussing which commands should be provided to the regular users.

> I'd like to have an idea if it is something to invest my time in.
> My main interest would be refactoring.

I don't get what you are asking here...

Hope this helps.

Regards,

- Joris

pgsql-general by date:

Previous
From: Bill
Date:
Subject: Trigger function is not called
Next
From: Mark Roberts
Date:
Subject: Re: SERIAL datatype