mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-04 04:26:53 +02:00
4192f2d85a
hazards. Instead teach these programs to prompt for a password when necessary, just like all our other programs. I did not bother to invent -W switches for them, since the return on investment seems so low.
286 lines
8.2 KiB
Plaintext
286 lines
8.2 KiB
Plaintext
<!-- $PostgreSQL: pgsql/doc/src/sgml/oid2name.sgml,v 1.4 2007/12/11 02:31:49 tgl Exp $ -->
|
|
|
|
<sect1 id="oid2name">
|
|
<title>oid2name</title>
|
|
|
|
<indexterm zone="oid2name">
|
|
<primary>oid2name</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
<application>oid2name</> is a utility program that helps administrators to
|
|
examine the file structure used by PostgreSQL. To make use of it, you need
|
|
to be familiar with the database file structure, which is described in
|
|
<xref linkend="storage">.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
The name <quote>oid2name</> is historical, and is actually rather
|
|
misleading, since most of the time when you use it, you will really
|
|
be concerned with tables' filenode numbers (which are the file names
|
|
visible in the database directories). Be sure you understand the
|
|
difference between table OIDs and table filenodes!
|
|
</para>
|
|
</note>
|
|
|
|
<sect2>
|
|
<title>Overview</title>
|
|
|
|
<para>
|
|
<application>oid2name</application> connects to a target database and
|
|
extracts OID, filenode, and/or table name information. You can also have
|
|
it show database OIDs or tablespace OIDs. The program is controlled by
|
|
a large number of command-line switches, as shown in
|
|
<xref linkend="oid2name-switches">.
|
|
</para>
|
|
|
|
<table id="oid2name-switches">
|
|
<title><application>oid2name</> switches</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Switch</entry>
|
|
<entry>Description</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><literal>-o</literal> <replaceable>oid</></entry>
|
|
<entry>show info for table with OID <replaceable>oid</></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-f</literal> <replaceable>filenode</></entry>
|
|
<entry>show info for table with filenode <replaceable>filenode</></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-t</literal> <replaceable>tablename_pattern</></entry>
|
|
<entry>show info for table(s) matching <replaceable>tablename_pattern</></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-s</literal></entry>
|
|
<entry>show tablespace OIDs</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-S</literal></entry>
|
|
<entry>include system objects (those in
|
|
<literal>information_schema</literal>, <literal>pg_toast</literal>
|
|
and <literal>pg_catalog</literal> schemas)
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-i</literal></entry>
|
|
<entry>include indexes and sequences in the listing</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-x</literal></entry>
|
|
<entry>display more information about each object shown: tablespace name,
|
|
schema name, and OID
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-q</literal></entry>
|
|
<entry>omit headers (useful for scripting)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-d</literal> <replaceable>database</></entry>
|
|
<entry>database to connect to</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-H</literal> <replaceable>host</></entry>
|
|
<entry>database server's host</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-p</literal> <replaceable>port</></entry>
|
|
<entry>database server's port</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>-U</literal> <replaceable>username</></entry>
|
|
<entry>username to connect as</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>
|
|
To display specific tables, select which tables to show by
|
|
using <literal>-o</>, <literal>-f</> and/or <literal>-t</>.
|
|
<literal>-o</> takes an OID,
|
|
<literal>-f</> takes a filenode,
|
|
and <literal>-t</> takes a tablename (actually, it's a LIKE
|
|
pattern, so you can use things like <literal>foo%</>).
|
|
You can use as many
|
|
of these switches as you like, and the listing will include all objects
|
|
matched by any of the switches. But note that these switches can only
|
|
show objects in the database given by <literal>-d</>.
|
|
</para>
|
|
|
|
<para>
|
|
If you don't give any of <literal>-o</>, <literal>-f</> or <literal>-t</>,
|
|
but do give <literal>-d</>, it will list all tables in the database
|
|
named by <literal>-d</>. In this mode, the <literal>-S</> and
|
|
<literal>-i</> switches control what gets listed.
|
|
</para>
|
|
|
|
<para>
|
|
If you don't give <literal>-d</> either, it will show a listing of database
|
|
OIDs. Alternatively you can give <literal>-s</> to get a tablespace
|
|
listing.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Examples</title>
|
|
|
|
<programlisting>
|
|
$ # what's in this database server, anyway?
|
|
$ oid2name
|
|
All databases:
|
|
Oid Database Name Tablespace
|
|
----------------------------------
|
|
17228 alvherre pg_default
|
|
17255 regression pg_default
|
|
17227 template0 pg_default
|
|
1 template1 pg_default
|
|
|
|
$ oid2name -s
|
|
All tablespaces:
|
|
Oid Tablespace Name
|
|
-------------------------
|
|
1663 pg_default
|
|
1664 pg_global
|
|
155151 fastdisk
|
|
155152 bigdisk
|
|
|
|
$ # OK, let's look into database alvherre
|
|
$ cd $PGDATA/base/17228
|
|
|
|
$ # get top 10 db objects in the default tablespace, ordered by size
|
|
$ ls -lS * | head -10
|
|
-rw------- 1 alvherre alvherre 136536064 sep 14 09:51 155173
|
|
-rw------- 1 alvherre alvherre 17965056 sep 14 09:51 1155291
|
|
-rw------- 1 alvherre alvherre 1204224 sep 14 09:51 16717
|
|
-rw------- 1 alvherre alvherre 581632 sep 6 17:51 1255
|
|
-rw------- 1 alvherre alvherre 237568 sep 14 09:50 16674
|
|
-rw------- 1 alvherre alvherre 212992 sep 14 09:51 1249
|
|
-rw------- 1 alvherre alvherre 204800 sep 14 09:51 16684
|
|
-rw------- 1 alvherre alvherre 196608 sep 14 09:50 16700
|
|
-rw------- 1 alvherre alvherre 163840 sep 14 09:50 16699
|
|
-rw------- 1 alvherre alvherre 122880 sep 6 17:51 16751
|
|
|
|
$ # I wonder what file 155173 is ...
|
|
$ oid2name -d alvherre -f 155173
|
|
From database "alvherre":
|
|
Filenode Table Name
|
|
----------------------
|
|
155173 accounts
|
|
|
|
$ # you can ask for more than one object
|
|
$ oid2name -d alvherre -f 155173 -f 1155291
|
|
From database "alvherre":
|
|
Filenode Table Name
|
|
-------------------------
|
|
155173 accounts
|
|
1155291 accounts_pkey
|
|
|
|
$ # you can mix the options, and get more details with -x
|
|
$ oid2name -d alvherre -t accounts -f 1155291 -x
|
|
From database "alvherre":
|
|
Filenode Table Name Oid Schema Tablespace
|
|
------------------------------------------------------
|
|
155173 accounts 155173 public pg_default
|
|
1155291 accounts_pkey 1155291 public pg_default
|
|
|
|
$ # show disk space for every db object
|
|
$ du [0-9]* |
|
|
> while read SIZE FILENODE
|
|
> do
|
|
> echo "$SIZE `oid2name -q -d alvherre -i -f $FILENODE`"
|
|
> done
|
|
16 1155287 branches_pkey
|
|
16 1155289 tellers_pkey
|
|
17561 1155291 accounts_pkey
|
|
...
|
|
|
|
$ # same, but sort by size
|
|
$ du [0-9]* | sort -rn | while read SIZE FN
|
|
> do
|
|
> echo "$SIZE `oid2name -q -d alvherre -f $FN`"
|
|
> done
|
|
133466 155173 accounts
|
|
17561 1155291 accounts_pkey
|
|
1177 16717 pg_proc_proname_args_nsp_index
|
|
...
|
|
|
|
$ # If you want to see what's in tablespaces, use the pg_tblspc directory
|
|
$ cd $PGDATA/pg_tblspc
|
|
$ oid2name -s
|
|
All tablespaces:
|
|
Oid Tablespace Name
|
|
-------------------------
|
|
1663 pg_default
|
|
1664 pg_global
|
|
155151 fastdisk
|
|
155152 bigdisk
|
|
|
|
$ # what databases have objects in tablespace "fastdisk"?
|
|
$ ls -d 155151/*
|
|
155151/17228/ 155151/PG_VERSION
|
|
|
|
$ # Oh, what was database 17228 again?
|
|
$ oid2name
|
|
All databases:
|
|
Oid Database Name Tablespace
|
|
----------------------------------
|
|
17228 alvherre pg_default
|
|
17255 regression pg_default
|
|
17227 template0 pg_default
|
|
1 template1 pg_default
|
|
|
|
$ # Let's see what objects does this database have in the tablespace.
|
|
$ cd 155151/17228
|
|
$ ls -l
|
|
total 0
|
|
-rw------- 1 postgres postgres 0 sep 13 23:20 155156
|
|
|
|
$ # OK, this is a pretty small table ... but which one is it?
|
|
$ oid2name -d alvherre -f 155156
|
|
From database "alvherre":
|
|
Filenode Table Name
|
|
----------------------
|
|
155156 foo
|
|
</programlisting>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Limitations</title>
|
|
|
|
<para>
|
|
<application>oid2name</> requires a running database server with
|
|
non-corrupt system catalogs. It is therefore of only limited use
|
|
for recovering from catastrophic database corruption situations.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Author</title>
|
|
|
|
<para>
|
|
B. Palmer <email>bpalmer@crimelabs.net</email>
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|