У меня есть такой запрос, чтобы перечислить таблицы в текущей базе данных:PostgreSQL, падение таблицы с запросом
SELECT c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind
IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
pg_catalog.pg_table_is_visible(c.oid)
Я пытаюсь отбросить все эти таблицы, используя верхний ВЫБРАТЬ как подзапрос:
DROP TABLE IF EXISTS (SELECT c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind
IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
pg_catalog.pg_table_is_visible(c.oid)) as tname
Но что не работают.
Как правильно написать запрос, который выведет все таблицы, перечисленные показанным запросом SELECT?
На данный момент я использую DataReader для обработки результатов запроса и отбрасывания таблиц на единицу.
Но я думаю, что это может пойти «сразу».
Если ваше намерение удалить все объекты пользователя , это можно сделать гораздо проще, используя 'drop, принадлежащий your_pg_username' –
Hm, для этих таблиц владельцем является« postgres ». Это может закончиться хорошо? Я также хотел бы удалить свои пользовательские функции, поэтому получение его с подзапросом будет более полезным для моих целей. –
Как правило, не рекомендуется использовать суперпользователя (postgres), чтобы создать свой собственный материал - и это одна из причин. Другая (более важная) причина заключается в том, что это означает, что ваше приложение подключается к базе данных с привилегиями суперпользователя, которое является открытым отверстием безопасности. –