psql \d always double-quotes table names:
Table "public.xx"
Column | Type | Modifiers
--------+---------+-----------
y | integer |
Indexes:
"ii" btree (y)
With this patch, double-quotes are not used when not required:
test=> \d xx
Table public.xx
Column | Type | Modifiers
--------+---------+-----------
y | integer |
Indexes:
ii btree (y)
but does in this case:
test=> \d "xx y"
Table public."xx y"
Column | Type | Modifiers
--------+---------+-----------
y | integer |
Indexes:
vv btree (y)
This patch uses pg_dump fmtId() to double-quote only when necessary.
--
Bruce Momjian | http://candle.pha.pa.us
[EMAIL PROTECTED] | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: src/bin/psql/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/Makefile,v
retrieving revision 1.38
diff -c -c -r1.38 Makefile
*** src/bin/psql/Makefile 29 Nov 2003 19:52:06 -0000 1.38
--- src/bin/psql/Makefile 23 Dec 2003 04:52:20 -0000
***************
*** 15,25 ****
REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
! override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND
OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
startup.o prompt.o variables.o large_obj.o print.o describe.o \
! tab-complete.o mbprint.o
all: submake-libpq submake-libpgport psql
--- 15,26 ----
REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
! override CPPFLAGS := -I$(top_srcdir)/src/bin/pg_dump -I$(libpq_srcdir) $(CPPFLAGS)
-DFRONTEND
OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
startup.o prompt.o variables.o large_obj.o print.o describe.o \
! tab-complete.o mbprint.o \
! dumputils.o $(top_builddir)/src/backend/parser/keywords.o
all: submake-libpq submake-libpgport psql
***************
*** 27,32 ****
--- 28,36 ----
$(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@
help.o: $(srcdir)/sql_help.h
+
+ dumputils.c: % : $(top_srcdir)/src/bin/pg_dump/%
+ rm -f $@ && $(LN_S) $< .
ifdef PERL
$(srcdir)/sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml)
Index: src/bin/psql/describe.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/describe.c,v
retrieving revision 1.90
diff -c -c -r1.90 describe.c
*** src/bin/psql/describe.c 1 Dec 2003 22:21:54 -0000 1.90
--- src/bin/psql/describe.c 23 Dec 2003 04:52:21 -0000
***************
*** 16,21 ****
--- 16,23 ----
#include "print.h"
#include "variables.h"
+ #include "dumputils.h"
+
#include <ctype.h>
#ifdef WIN32
***************
*** 658,663 ****
--- 660,667 ----
PQExpBufferData tmpbuf;
int cols = 0;
int numrows = 0;
+ char schema_rel_str[NAMEDATALEN * 2 + 6];
+
struct
{
bool hasindex;
***************
*** 812,851 ****
#endif
}
/* Make title */
switch (tableinfo.relkind)
{
case 'r':
! printfPQExpBuffer(&title, _("Table \"%s.%s\""),
! schemaname, relationname);
break;
case 'v':
! printfPQExpBuffer(&title, _("View \"%s.%s\""),
! schemaname, relationname);
break;
case 'S':
! printfPQExpBuffer(&title, _("Sequence \"%s.%s\""),
! schemaname, relationname);
break;
case 'i':
! printfPQExpBuffer(&title, _("Index \"%s.%s\""),
! schemaname, relationname);
break;
case 's':
! printfPQExpBuffer(&title, _("Special relation \"%s.%s\""),
! schemaname, relationname);
break;
case 't':
! printfPQExpBuffer(&title, _("TOAST table \"%s.%s\""),
! schemaname, relationname);
break;
case 'c':
! printfPQExpBuffer(&title, _("Composite type \"%s.%s\""),
! schemaname, relationname);
break;
default:
! printfPQExpBuffer(&title, _("?%c? \"%s.%s\""),
! tableinfo.relkind, schemaname,
relationname);
break;
}
--- 816,852 ----
#endif
}
+
+ strcpy(schema_rel_str, fmtId(schemaname));
+ strcat(schema_rel_str, ".");
+ strcat(schema_rel_str, fmtId(relationname));
+
/* Make title */
switch (tableinfo.relkind)
{
case 'r':
! printfPQExpBuffer(&title, _("Table %s"), schema_rel_str);
break;
case 'v':
! printfPQExpBuffer(&title, _("View %s"), schema_rel_str);
break;
case 'S':
! printfPQExpBuffer(&title, _("Sequence %s"), schema_rel_str);
break;
case 'i':
! printfPQExpBuffer(&title, _("Index %s"), schema_rel_str);
break;
case 's':
! printfPQExpBuffer(&title, _("Special relation %s"),
schema_rel_str);
break;
case 't':
! printfPQExpBuffer(&title, _("TOAST table %s"), schema_rel_str);
break;
case 'c':
! printfPQExpBuffer(&title, _("Composite type %s"),
schema_rel_str);
break;
default:
! printfPQExpBuffer(&title, _("?%c? %s"), tableinfo.relkind,
schema_rel_str);
break;
}
***************
*** 887,895 ****
resetPQExpBuffer(&tmpbuf);
appendPQExpBuffer(&tmpbuf, "%s, ", indamname);
/* we assume here that index and table are in same schema */
! appendPQExpBuffer(&tmpbuf, _("for table \"%s.%s\""),
! schemaname, indtable);
if (strlen(indpred))
appendPQExpBuffer(&tmpbuf, ", predicate (%s)",
indpred);
--- 888,899 ----
resetPQExpBuffer(&tmpbuf);
appendPQExpBuffer(&tmpbuf, "%s, ", indamname);
+ strcpy(schema_rel_str, fmtId(schemaname));
+ strcat(schema_rel_str, ".");
+ strcat(schema_rel_str, fmtId(indtable));
+
/* we assume here that index and table are in same schema */
! appendPQExpBuffer(&tmpbuf, _("for table %s"), schema_rel_str);
if (strlen(indpred))
appendPQExpBuffer(&tmpbuf, ", predicate (%s)",
indpred);
***************
*** 1095,1102 ****
const char *usingpos;
/* Output index name */
! printfPQExpBuffer(&buf, _(" \"%s\""),
! PQgetvalue(result1,
i, 0));
/* Label as primary key or unique (but not both) */
appendPQExpBuffer(&buf,
--- 1099,1106 ----
const char *usingpos;
/* Output index name */
! printfPQExpBuffer(&buf, _(" %s"),
!
fmtId(PQgetvalue(result1, i, 0)));
/* Label as primary key or unique (but not both) */
appendPQExpBuffer(&buf,
***************
*** 1125,1132 ****
footers[count_footers++] = xstrdup(buf.data);
for (i = 0; i < check_count; i++)
{
! printfPQExpBuffer(&buf, _(" \"%s\" %s"),
! PQgetvalue(result2,
i, 1),
PQgetvalue(result2,
i, 0));
footers[count_footers++] = xstrdup(buf.data);
--- 1129,1136 ----
footers[count_footers++] = xstrdup(buf.data);
for (i = 0; i < check_count; i++)
{
! printfPQExpBuffer(&buf, _(" %s %s"),
!
fmtId(PQgetvalue(result2, i, 1)),
PQgetvalue(result2,
i, 0));
footers[count_footers++] = xstrdup(buf.data);
***************
*** 1140,1147 ****
footers[count_footers++] = xstrdup(buf.data);
for (i = 0; i < foreignkey_count; i++)
{
! printfPQExpBuffer(&buf, _(" \"%s\" %s"),
! PQgetvalue(result5,
i, 0),
PQgetvalue(result5,
i, 1));
footers[count_footers++] = xstrdup(buf.data);
--- 1144,1151 ----
footers[count_footers++] = xstrdup(buf.data);
for (i = 0; i < foreignkey_count; i++)
{
! printfPQExpBuffer(&buf, _(" %s %s"),
!
fmtId(PQgetvalue(result5, i, 0)),
PQgetvalue(result5,
i, 1));
footers[count_footers++] = xstrdup(buf.data);
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings