mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 06:46:54 +02:00
1aaf532dea
oid2name has done little effort to keep an interface consistent with other binary utilities: - -H was used instead of -h/-host. This option is now marked as deprecated, still its output is accepted to be backward-compatible. - -P has been removed from the code, and was still documented. - All options gain long aliases, making connection options more similar to other binaries. - Document environment variables which could be used: PGHOST, PGPORT and PGUSER. A basic set of TAP tests is added on the way, and documentation is cleaned up to be more consistent with other things. Author: Tatsuro Yamada Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/c7e7f25c-1747-cd0f-9335-390bc97b2db5@lab.ntt.co.jp
370 lines
12 KiB
Plaintext
370 lines
12 KiB
Plaintext
<!-- doc/src/sgml/oid2name.sgml -->
|
|
|
|
<refentry id="oid2name">
|
|
<indexterm zone="oid2name">
|
|
<primary>oid2name</primary>
|
|
</indexterm>
|
|
|
|
<refmeta>
|
|
<refentrytitle>oid2name</refentrytitle>
|
|
<manvolnum>1</manvolnum>
|
|
<refmiscinfo>Application</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>oid2name</refname>
|
|
<refpurpose>resolve OIDs and file nodes in a <productname>PostgreSQL</productname> data directory</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<cmdsynopsis>
|
|
<command>oid2name</command>
|
|
<arg rep="repeat"><replaceable>option</replaceable></arg>
|
|
</cmdsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
|
|
<para>
|
|
<application>oid2name</application> 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</quote> 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>
|
|
|
|
<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.
|
|
</para>
|
|
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Options</title>
|
|
|
|
<para>
|
|
<application>oid2name</application> accepts the following command-line arguments:
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
<term><option>-f <replaceable class="parameter">filenode</replaceable></option></term>
|
|
<term><option>--filenode=<replaceable class="parameter">filenode</replaceable></option></term>
|
|
<listitem><para>show info for table with filenode <replaceable>filenode</replaceable>.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-i</option></term>
|
|
<term><option>--indexes</option></term>
|
|
<listitem><para>include indexes and sequences in the listing.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-o <replaceable class="parameter">oid</replaceable></option></term>
|
|
<term><option>--oid=<replaceable class="parameter">oid</replaceable></option></term>
|
|
<listitem><para>show info for table with OID <replaceable>oid</replaceable>.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-q</option></term>
|
|
<term><option>--quiet</option></term>
|
|
<listitem><para>omit headers (useful for scripting).</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-s</option></term>
|
|
<term><option>--tablespaces</option></term>
|
|
<listitem><para>show tablespace OIDs.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-S</option></term>
|
|
<term><option>--system-objects</option></term>
|
|
<listitem><para>include system objects (those in
|
|
<option>information_schema</option>, <option>pg_toast</option>
|
|
and <option>pg_catalog</option> schemas).
|
|
</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-t <replaceable class="parameter">tablename_pattern</replaceable></option></term>
|
|
<term><option>--table=<replaceable class="parameter">tablename_pattern</replaceable></option></term>
|
|
<listitem><para>show info for table(s) matching <replaceable class="parameter">tablename_pattern</replaceable>.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-V</option></term>
|
|
<term><option>--version</option></term>
|
|
<listitem>
|
|
<para>
|
|
Print the <application>oid2name</application> version and exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-x</option></term>
|
|
<term><option>--extended</option></term>
|
|
<listitem><para>display more information about each object shown: tablespace name,
|
|
schema name, and OID.
|
|
</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-?</option></term>
|
|
<term><option>--help</option></term>
|
|
<listitem>
|
|
<para>
|
|
Show help about <application>oid2name</application> command line
|
|
arguments, and exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
<application>oid2name</application> also accepts the following command-line
|
|
arguments for connection parameters:
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>-d <replaceable class="parameter">database</replaceable></option></term>
|
|
<term><option>--dbname=<replaceable class="parameter">database</replaceable></option></term>
|
|
<listitem><para>database to connect to.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-h <replaceable class="parameter">host</replaceable></option></term>
|
|
<term><option>--host=<replaceable class="parameter">host</replaceable></option></term>
|
|
<listitem><para>database server's host.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-H <replaceable class="parameter">host</replaceable></option></term>
|
|
<listitem><para>database server's host. Use of this parameter is
|
|
<emphasis>deprecated</emphasis> as of
|
|
<productname>PostgreSQL</productname> 12.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-p <replaceable class="parameter">port</replaceable></option></term>
|
|
<term><option>--port=<replaceable class="parameter">port</replaceable></option></term>
|
|
<listitem><para>database server's port.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-U <replaceable class="parameter">username</replaceable></option></term>
|
|
<term><option>--username=<replaceable class="parameter">username</replaceable></option></term>
|
|
<listitem><para>user name to connect as.</para></listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
To display specific tables, select which tables to show by
|
|
using <option>-o</option>, <option>-f</option> and/or <option>-t</option>.
|
|
<option>-o</option> takes an OID,
|
|
<option>-f</option> takes a filenode,
|
|
and <option>-t</option> takes a table name (actually, it's a <literal>LIKE</literal>
|
|
pattern, so you can use things like <literal>foo%</literal>).
|
|
You can use as many
|
|
of these options as you like, and the listing will include all objects
|
|
matched by any of the options. But note that these options can only
|
|
show objects in the database given by <option>-d</option>.
|
|
</para>
|
|
|
|
<para>
|
|
If you don't give any of <option>-o</option>, <option>-f</option> or <option>-t</option>,
|
|
but do give <option>-d</option>, it will list all tables in the database
|
|
named by <option>-d</option>. In this mode, the <option>-S</option> and
|
|
<option>-i</option> options control what gets listed.
|
|
</para>
|
|
|
|
<para>
|
|
If you don't give <option>-d</option> either, it will show a listing of database
|
|
OIDs. Alternatively you can give <option>-s</option> to get a tablespace
|
|
listing.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Environment</title>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><envar>PGHOST</envar></term>
|
|
<term><envar>PGPORT</envar></term>
|
|
<term><envar>PGUSER</envar></term>
|
|
|
|
<listitem>
|
|
<para>
|
|
Default connection parameters.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>
|
|
This utility, like most other <productname>PostgreSQL</productname>
|
|
utilities, also uses the environment variables supported by
|
|
<application>libpq</application> (see <xref linkend="libpq-envars"/>).
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Notes</title>
|
|
|
|
<para>
|
|
<application>oid2name</application> 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>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Examples</title>
|
|
|
|
<screen>
|
|
$ # 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
|
|
</screen>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Author</title>
|
|
|
|
<para>
|
|
B. Palmer <email>bpalmer@crimelabs.net</email>
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|