Опитахте ли с anonymous code block
? Този кодов блок по-долу избира всички таблици от схемата public
който принадлежи на потребителя postgres
и задайте собствеността на потребителя user
:
DO $$
DECLARE row RECORD;
BEGIN
FOR row IN SELECT * FROM pg_tables
WHERE schemaname = 'public' AND tableowner = 'postgres' LOOP
EXECUTE FORMAT('ALTER TABLE %I.%I OWNER TO user',row.schemaname,row.tablename);
END LOOP;
END;
$$;
Имайте предвид, че тази операция ще промени собствеността върху всички таблици във вашата схема, която принадлежи на дадения потребител. Очевидно можете допълнително да филтрирате тези таблици, като промените pg_tables
заявка в цикъла. Разгледайте:
SELECT * FROM pg_tables WHERE schemaname = 'public' AND tableowner = 'postgres';
Използвайте го внимателно!
РЕДАКТИРАНЕ :За да филтрирате няколко таблици от селекцията по-горе, добавете NOT IN
, като например:
SELECT * FROM pg_tables
WHERE schemaname = 'public' AND tableowner = 'postgres'
AND tablename NOT IN ('table1','table2','table3')