Как перенести все индексы БД в другой tablespace

Сперва создаем ts_nvme2 или любое другое название, затем

  

DO $$
DECLARE
    cmd text;
BEGIN
    FOR cmd IN
        SELECT format('ALTER INDEX %I.%I SET TABLESPACE ts_nvme2;', n.nspname, c.relname)
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relkind = 'i'
          AND n.nspname NOT IN ('pg_catalog', 'information_schema')
          AND n.nspname !~ '^pg_toast'
    LOOP
        BEGIN
            EXECUTE cmd;
            RAISE NOTICE 'OK: %', cmd;
        EXCEPTION WHEN OTHERS THEN
            RAISE WARNING 'ERROR: % — %', cmd, SQLERRM;
        END;
    END LOOP;
END $$;

// - нужно еще на скоростной диск перенести WAL
// -- не на скоростной, а на высокоресурсный
C:\Windows\System32>mklink /D "C:\PG_DATA\pg_wal" "W:\PG_DATA\pg_wal"
символическая ссылка создана для C:\PG_DATA\pg_wal\ <<===>> W:\PG_DATA\pg_wal