Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
5a8f555e
Commit
5a8f555e
authored
Jun 12, 2002
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add -q option to oid2name. Add sample session to README.
parent
0f865e17
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
111 additions
and
55 deletions
+111
-55
contrib/oid2name/README.oid2name
contrib/oid2name/README.oid2name
+74
-35
contrib/oid2name/oid2name.c
contrib/oid2name/oid2name.c
+37
-20
No files found.
contrib/oid2name/README.oid2name
View file @
5a8f555e
With version 7.1 of PostgreSQL server, the old naming scheme for
databases and tables (in $PGDATA/base) has changed. The databases
are put in folders for their OID in pg_database and the tables in
that folder are named for their OIDs in pg_class. This app connects
to the database (you can specify host, port, user, pass etc to
connect to a host other than localhost) and extracts the OID and
table name information. It has 4 ways it can be run:
This utility allows administrators to view the file structure used by
PostgreSQL. Databases are placed in directories based on their OIDs in
pg_database, and the tables in that directory are named by their OIDs,
stored in pg_class.relfilenode. Oid2name connects to the database and
extracts the OID and table name information.
pg_oid2name
---------------------------------------------------------------------------
It can be used in four ways:
oid2name
This will connect to the template1 database and display all databases
in the system.
in the system:
$
./pg_oid2name
$
oid2name
All databases:
---------------------------------
18720 = test1
...
...
@@ -21,52 +24,88 @@ table name information. It has 4 ways it can be run:
18735 = postgres
18736 = cssi
pg_oid2name -d test [-x]
This connects to the database test and shows all tables and their OIDs.
oid2name -d test [-x]
$ ./pg_oid2name -d test
This connects to the database test and shows all tables and their OIDs:
$ oid2name -d test
All tables from database "test":
---------------------------------
18766 = dns
18737 = ips
18722 = testdate
pg_oid2name -d test -o 18737 or
pg_oid2name -d test -t testdate
oid2name -d test -o 18737
oid2name -d test -t testdate
This will connect to the database test and display the table name for oid
18737 and the oid for table name testdate respectivly.
18737 and the oid for table name testdate respectively:
$
./pg_
oid2name -d test -o 18737
$ oid2name -d test -o 18737
Tablename of oid 18737 from database "test":
---------------------------------
18737 = ips
$
./pg_
oid2name -d test -t testdate
$ oid2name -d test -t testdate
Oid of table testdate from database "test":
_______________________________
---------------------------------
18722 = testdate
---------------------------------------------------------------------------
Sample session:
$ cd /u/pg/data/base
$ oid2name
All databases:
---------------------------------
16817 = test2
16578 = x
16756 = test
1 = template1
16569 = template0
16818 = test3
16811 = floattest
$ cd 16756
$ ls 1873*
18730 18731 18732 18735 18736 18737 18738 18739
$ oid2name -d test -o 18737
Tablename of oid 18737 from database "test":
---------------------------------
18737 = ips
$ oid2name -d test -t ips
Oid of table ips from database "test":
---------------------------------
18737 = ips
$ du * | while read SIZE OID
> do
> echo "$SIZE `oid2name -q -d test -o $OID`"
> done
24 18737 = ips
36 18722 = cities
...
$ du * | while read SIZE OID
> do
> echo "$SIZE `oid2name -q -d test -o $OID`"
> done |
> sort -rn
2048 19324 = bigtable
1950 23903 = customers
...
---------------------------------------------------------------------------
There should be a decent amount of error handling in the app, a lot of it
dealt with via the postgres function calls.
$ ./pg_oid2name -d nothere -t testdate
Oid of table testdate from database "nothere":
_______________________________
Connection to database 'nothere' failed.
FATAL 1: Database "nothere" does not exist in the system catalog.
$ ./pg_oid2name -d test -t nothere
Oid of table nothere from database "test":
_______________________________
No tables with that name found
Mail me with any problems or additions you would like to see. Clearing
house for the code will be at: http://www.crimelabs.net
house for the code will be at: http://www.crimelabs.net
b. palmer, bpalmer@crimelabs.net
contrib/oid2name/oid2name.c
View file @
5a8f555e
...
...
@@ -21,6 +21,8 @@ struct options
int
gettable
;
int
getoid
;
int
quiet
;
int
systables
;
int
remotehost
;
...
...
@@ -59,6 +61,8 @@ get_opts(int argc, char **argv, struct options * my_opts)
my_opts
->
gettable
=
0
;
my_opts
->
getoid
=
0
;
my_opts
->
quiet
=
0
;
my_opts
->
systables
=
0
;
my_opts
->
remotehost
=
0
;
...
...
@@ -67,7 +71,7 @@ get_opts(int argc, char **argv, struct options * my_opts)
my_opts
->
remotepass
=
0
;
/* get opts */
while
((
c
=
getopt
(
argc
,
argv
,
"H:p:U:P:d:t:o:xh?"
))
!=
-
1
)
while
((
c
=
getopt
(
argc
,
argv
,
"H:p:U:P:d:t:o:
q
xh?"
))
!=
-
1
)
{
switch
(
c
)
{
...
...
@@ -82,13 +86,13 @@ get_opts(int argc, char **argv, struct options * my_opts)
/* make sure we set the database first */
if
(
!
my_opts
->
getdatabase
)
{
fprintf
(
stderr
,
"
Sorry, but y
ou must specify a database to dump from.
\n
"
);
fprintf
(
stderr
,
"
Y
ou must specify a database to dump from.
\n
"
);
exit
(
1
);
}
/* make sure we don't try to do a -o also */
if
(
my_opts
->
getoid
)
{
fprintf
(
stderr
,
"
Sorry, y
ou can only specify either oid or table
\n
"
);
fprintf
(
stderr
,
"
Y
ou can only specify either oid or table
\n
"
);
exit
(
1
);
}
...
...
@@ -102,13 +106,13 @@ get_opts(int argc, char **argv, struct options * my_opts)
/* make sure we set the database first */
if
(
!
my_opts
->
getdatabase
)
{
fprintf
(
stderr
,
"
Sorry, but y
ou must specify a database to dump from.
\n
"
);
fprintf
(
stderr
,
"
Y
ou must specify a database to dump from.
\n
"
);
exit
(
1
);
}
/* make sure we don't try to do a -t also */
if
(
my_opts
->
gettable
)
{
fprintf
(
stderr
,
"
Sorry, y
ou can only specify either oid or table
\n
"
);
fprintf
(
stderr
,
"
Y
ou can only specify either oid or table
\n
"
);
exit
(
1
);
}
...
...
@@ -117,6 +121,10 @@ get_opts(int argc, char **argv, struct options * my_opts)
break
;
case
'q'
:
my_opts
->
quiet
=
1
;
break
;
/* host to connect to */
case
'H'
:
my_opts
->
remotehost
=
1
;
...
...
@@ -149,17 +157,18 @@ get_opts(int argc, char **argv, struct options * my_opts)
/* help! (ugly in code for easier editing) */
case
'?'
:
case
'h'
:
fprintf
(
stderr
,
"
\
n
\
Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid]
\n
\
fprintf
(
stderr
,
"\
Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid]
\n
\
default action display all databases
\n
\
-d database database to oid2name
\n
\
-x display system tables
\n
\
-t table | -o oid search for table name (-t) or
\n
\
oid (-o) in -d database
\n
\
-q quiet
\n
\
-H host connect to remote host
\n
\
-p port host port to connect to
\n
\
-U username username to connect with
\n
\
-P password password for username
\n\
n
\
-P password password for username
\n
\
"
);
exit
(
1
);
break
;
...
...
@@ -402,9 +411,11 @@ main(int argc, char **argv)
/* display all the tables in the database */
if
(
my_opts
->
getdatabase
&
my_opts
->
gettable
)
{
printf
(
"Oid of table %s from database
\"
%s
\"
:
\n
"
,
my_opts
->
_tbname
,
my_opts
->
_dbname
);
printf
(
"_______________________________
\n
"
);
if
(
!
my_opts
->
quiet
)
{
printf
(
"Oid of table %s from database
\"
%s
\"
:
\n
"
,
my_opts
->
_tbname
,
my_opts
->
_dbname
);
printf
(
"---------------------------------
\n
"
);
}
pgconn
=
sql_conn
(
my_opts
->
_dbname
,
my_opts
);
sql_exec_searchtable
(
pgconn
,
my_opts
->
_tbname
);
PQfinish
(
pgconn
);
...
...
@@ -415,9 +426,11 @@ main(int argc, char **argv)
/* search for the tablename of the given OID */
if
(
my_opts
->
getdatabase
&
my_opts
->
getoid
)
{
printf
(
"Tablename of oid %i from database
\"
%s
\"
:
\n
"
,
my_opts
->
_oid
,
my_opts
->
_dbname
);
printf
(
"---------------------------------
\n
"
);
if
(
!
my_opts
->
quiet
)
{
printf
(
"Tablename of oid %i from database
\"
%s
\"
:
\n
"
,
my_opts
->
_oid
,
my_opts
->
_dbname
);
printf
(
"---------------------------------
\n
"
);
}
pgconn
=
sql_conn
(
my_opts
->
_dbname
,
my_opts
);
sql_exec_searchoid
(
pgconn
,
my_opts
->
_oid
);
PQfinish
(
pgconn
);
...
...
@@ -428,9 +441,11 @@ main(int argc, char **argv)
/* search for the oid for the given tablename */
if
(
my_opts
->
getdatabase
)
{
printf
(
"All tables from database
\"
%s
\"
:
\n
"
,
my_opts
->
_dbname
);
printf
(
"---------------------------------
\n
"
);
if
(
!
my_opts
->
quiet
)
{
printf
(
"All tables from database
\"
%s
\"
:
\n
"
,
my_opts
->
_dbname
);
printf
(
"---------------------------------
\n
"
);
}
pgconn
=
sql_conn
(
my_opts
->
_dbname
,
my_opts
);
sql_exec_dumptable
(
pgconn
,
my_opts
->
systables
);
PQfinish
(
pgconn
);
...
...
@@ -439,9 +454,11 @@ main(int argc, char **argv)
}
/* display all the databases for the server we are connected to.. */
printf
(
"All databases:
\n
"
);
printf
(
"---------------------------------
\n
"
);
if
(
!
my_opts
->
quiet
)
{
printf
(
"All databases:
\n
"
);
printf
(
"---------------------------------
\n
"
);
}
pgconn
=
sql_conn
(
"template1"
,
my_opts
);
sql_exec_dumpdb
(
pgconn
);
PQfinish
(
pgconn
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment