Извлекать все таблицы в конкретной базе данных Postgres с помощью node?

#node.js #postgresql #node-postgres #postgresql-12

#node.js #postgresql #узел-postgres #postgresql-12

Вопрос:

Мне нужно получить все таблицы в конкретной базе данных Postgres с помощью node. Но не найти никакого способа добиться этого. Есть ли какой-нибудь способ получить это?

Например, предположим, что у меня есть база данных с именем ‘TestDatabase’, она содержит 4 таблицы (просто предположим, что в ней может быть меньше или больше) Человек, компания, одежда, животное. Мне нужно получить имя всех из них с помощью node.

Я также использую node-postgres (‘pg’) для подключения к базе данных.

Ответ №1:

В качестве альтернативы вы можете использовать information_schema . Это не лучше, чем объекты pg_ * в системном каталоге, но стандартизировано и более переносимо. Вот оно:

 select table_schema||'.'||table_name as table_fullname
 from information_schema."tables"
 where table_type = 'BASE TABLE'
  and table_schema not in ('pg_catalog', 'information_schema');
  

Системные объекты были отфильтрованы с помощью этого выражения

 table_schema not in ('pg_catalog', 'information_schema')
  

Вы можете дополнительно изменить его, чтобы включать только те схемы, которые вам нужны.

Ответ №2:

Это общее решение. Используйте запрос ниже:

 SELECT
   relname
FROM
   pg_class
WHERE
   relkind = 'r';
  

pg_class это системный каталог, который содержит информацию о табличных объектах. Следовательно, необходимо ограничить relkind ‘r’. Это будет включать все типы таблиц. Для дальнейшего ограничения см. relpersistence Ссылку ниже.

https://www.postgresql.org/docs/current/catalog-pg-class.html

Комментарии:

1. Я бы изменил ваш вопрос, указав, что, поскольку теперь он гласит: «Мне нужно получить все таблицы в определенной базе данных Postgres …». Для того, что вы хотите, запустите запрос в @Stefanov.sm ответьте ниже как пользователь, от имени которого вы создали таблицы. Запросы ‘information_schema` будут показывать вам только таблицы, которые создал или имеет права пользователь, выполняющий запрос.

2. Я не знаю много выше Postgres, я получаю слишком много информации, выполняя это… например, pg_statctics, pg_types extra . Мне нужны только таблицы, которые я создал.