How to check is the table system

Started by Андрейover 20 years ago5 messagesgeneral
Jump to latest
#1Андрей
andyk@softwarium.net

Hello!

In what way can I determine is the table system? ODBC driver does it
by checking table name's prefix: if it begins with 'pg_' - driver
desides that the table is system, but that's a bad idea. I can create
table and call it 'pg_mytable', but it won't become system!

Big Thanks,
Andrei

#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Андрей (#1)
Re: How to check is the table system

On Thu, Sep 15, 2005 at 09:12:44PM +0300, ???????????? wrote:

In what way can I determine is the table system? ODBC driver does it
by checking table name's prefix: if it begins with 'pg_' - driver
desides that the table is system, but that's a bad idea. I can create
table and call it 'pg_mytable', but it won't become system!

If a table is in the pg_catalog schema, it's a system table. The pg_
prefix was used as a convention before the introduction of schemas in
7.3 -- users were not supposed to create tables with names beggining
with pg_. I guess it's still a bad idea to create tables with such
names.

--
Alvaro Herrera -- Valdivia, Chile Architect, www.EnterpriseDB.com
"La gente vulgar solo piensa en pasar el tiempo;
el que tiene talento, en aprovecharlo"

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Андрей (#1)
Re: How to check is the table system

=?UTF-8?B?0JDQvdC00YDQtdC5?= <andyk@softwarium.net> writes:

In what way can I determine is the table system? ODBC driver does it
by checking table name's prefix: if it begins with 'pg_' - driver
desides that the table is system, but that's a bad idea.

Yup, that's been incorrect since PG 7.3. The proper test is whether the
table is in the pg_catalog schema.

Depending on your purposes you might also want to exclude pg_toast.

regards, tom lane

#4Martijn van Oosterhout
kleptog@svana.org
In reply to: Андрей (#1)
Re: How to check is the table system

On Thu, Sep 15, 2005 at 09:12:44PM +0300, ???????????? wrote:

Hello!

In what way can I determine is the table system? ODBC driver does it
by checking table name's prefix: if it begins with 'pg_' - driver
desides that the table is system, but that's a bad idea. I can create
table and call it 'pg_mytable', but it won't become system!

Check it is in the pg_catalog schema...

--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
tool for doing 5% of the work and then sitting around waiting for someone
else to do the other 95% so you can sue them.

#5Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: Андрей (#1)
Re: How to check is the table system

On Thu, Sep 15, 2005 at 09:12:44PM +0300, ???????????? wrote:

Hello!

In what way can I determine is the table system? ODBC driver does it
by checking table name's prefix: if it begins with 'pg_' - driver
desides that the table is system, but that's a bad idea. I can create
table and call it 'pg_mytable', but it won't become system!

From http://lnk.nu/cvs.pgfoundry.org/3yb.sql:

-- Note that generic case would be "select $1 like ''pg!_%'' escape ''!''
create or replace function _pg_sv_system_schema(name) returns boolean
as 'select $1 in (name ''pg_catalog'', name ''pg_toast'',
name ''pg_sysviews'', name ''information_schema'')'
language sql immutable strict;

create or replace function _pg_sv_temp_schema(name) returns boolean
as 'select $1 like ''pg!_temp!_%'' escape ''!'' '
language sql immutable strict;

Of course, as others have mentioned, that won't work if you're pre-schemas.
--
Jim C. Nasby, Sr. Engineering Consultant jnasby@pervasive.com
Pervasive Software http://pervasive.com work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf cell: 512-569-9461