psql \d commands and information_schema

Поиск
Список
Период
Сортировка
От Martin Pihlak
Тема psql \d commands and information_schema
Дата
Msg-id 49A51740.9050804@gmail.com
обсуждение исходный текст
Ответы Re: psql \d commands and information_schema
Список pgsql-hackers
Attached is a patch that modifies psql \dX commands to treat objects
in information_schema as "system objects". This prevents them from
showing up in \dX *.* and polluting the user objects list. This is
especially annoying if user objects are in multiple schemas, and
one wants to get a quick overview by running \dX *.*

regards,
Martin
*** a/src/bin/psql/describe.c
--- b/src/bin/psql/describe.c
***************
*** 23,28 ****
--- 23,34 ----
  #include "variables.h"


+ /* Macros for exluding system objects from \d commands */
+ #define NOT_SYSTEM_OBJECT        " n.nspname NOT IN ('pg_catalog', 'information_schema')\n"
+ #define AND_NOT_SYSTEM_OBJECT    " AND" NOT_SYSTEM_OBJECT
+ #define WHERE_NOT_SYSTEM_OBJECT    " WHERE" NOT_SYSTEM_OBJECT
+
+
  static bool describeOneTableDetails(const char *schemaname,
                          const char *relationname,
                          const char *oid,
***************
*** 95,101 **** describeAggregates(const char *pattern, bool verbose, bool showSystem)
                        gettext_noop("Description"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
--- 101,107 ----
                        gettext_noop("Description"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
***************
*** 282,288 **** describeFunctions(const char *pattern, bool verbose, bool showSystem)
                        "      AND NOT p.proisagg\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
--- 288,294 ----
                        "      AND NOT p.proisagg\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
***************
*** 373,379 **** describeTypes(const char *pattern, bool verbose, bool showSystem)
          appendPQExpBuffer(&buf, "  AND t.typname !~ '^_'\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      /* Match name pattern against either internal or external name */
      processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 379,385 ----
          appendPQExpBuffer(&buf, "  AND t.typname !~ '^_'\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      /* Match name pattern against either internal or external name */
      processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 428,434 **** describeOperators(const char *pattern, bool showSystem)
                        gettext_noop("Description"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, true,
                            "n.nspname", "o.oprname", NULL,
--- 434,440 ----
                        gettext_noop("Description"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, true,
                            "n.nspname", "o.oprname", NULL,
***************
*** 632,638 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("aggregate"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
--- 638,644 ----
                        gettext_noop("aggregate"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
***************
*** 655,661 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("function"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
--- 661,667 ----
                        gettext_noop("function"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "p.proname", NULL,
***************
*** 673,679 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("operator"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "o.oprname", NULL,
--- 679,685 ----
                        gettext_noop("operator"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "o.oprname", NULL,
***************
*** 691,697 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("data type"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "pg_catalog.format_type(t.oid, NULL)",
--- 697,703 ----
                        gettext_noop("data type"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "pg_catalog.format_type(t.oid, NULL)",
***************
*** 715,721 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("index"),
                        gettext_noop("sequence"));
       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "c.relname", NULL,
--- 721,727 ----
                        gettext_noop("index"),
                        gettext_noop("sequence"));
       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "c.relname", NULL,
***************
*** 735,741 **** objectDescription(const char *pattern, bool showSystem)
                        gettext_noop("rule"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      /* XXX not sure what to do about visibility rule here? */
      processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 741,747 ----
                        gettext_noop("rule"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      /* XXX not sure what to do about visibility rule here? */
      processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 754,760 **** objectDescription(const char *pattern, bool showSystem)
      "       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n",
                        gettext_noop("trigger"));
       if (!showSystem)
!          appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");

      /* XXX not sure what to do about visibility rule here? */
      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
--- 760,766 ----
      "       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n",
                        gettext_noop("trigger"));
       if (!showSystem)
!          appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);

      /* XXX not sure what to do about visibility rule here? */
      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
***************
*** 809,815 **** describeTableDetails(const char *pattern, bool verbose, bool showSystem)
       "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "c.relname", NULL,
--- 815,821 ----
       "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n");

       if (!showSystem)
!          appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
                            "n.nspname", "c.relname", NULL,
***************
*** 2018,2024 **** listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
      if (!showSystem)
          /* Exclude system and pg_toast objects, but show temp tables */
          appendPQExpBuffer(&buf,
!                           "  AND n.nspname <> 'pg_catalog'\n"
                            "  AND n.nspname !~ '^pg_toast'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 2024,2030 ----
      if (!showSystem)
          /* Exclude system and pg_toast objects, but show temp tables */
          appendPQExpBuffer(&buf,
!                           AND_NOT_SYSTEM_OBJECT
                            "  AND n.nspname !~ '^pg_toast'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 2090,2096 **** listDomains(const char *pattern, bool showSystem)
                        gettext_noop("Check"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "  AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "t.typname", NULL,
--- 2096,2102 ----
                        gettext_noop("Check"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "t.typname", NULL,
***************
*** 2145,2151 **** listConversions(const char *pattern, bool showSystem)
                        gettext_noop("Default?"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "c.conname", NULL,
--- 2151,2157 ----
                        gettext_noop("Default?"));

       if (!showSystem)
!          appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);

      processSQLNamePattern(pset.db, &buf, pattern, true, false,
                            "n.nspname", "c.conname", NULL,

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Dave Page
Дата:
Сообщение: Re: Service not starting: Error 1053
Следующее
От: Magnus Hagander
Дата:
Сообщение: Re: Service not starting: Error 1053