PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich den Besitz einiger Tabellen in einer Datenbank von Postgres auf einen anderen Benutzer ändern?

Haben Sie es mit einem anonymous code block versucht ? Dieser Codeblock unten wählt alle Tabellen aus dem Schema public aus die dem Benutzer postgres gehört und setzen Sie den Besitz auf den Benutzer 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; 
$$;

Denken Sie daran, dass dieser Vorgang den Besitz von allen Tabellen ändert in Ihrem Schema, das dem angegebenen Benutzer gehört. Natürlich können Sie diese Tabellen weiter filtern, indem Sie pg_tables ändern Abfrage in der Schleife. Schauen Sie sich an:

SELECT * FROM pg_tables WHERE schemaname = 'public' AND tableowner = 'postgres';

Verwenden Sie es mit Vorsicht!

BEARBEITEN :Um ein paar Tabellen aus der obigen Auswahl herauszufiltern, fügen Sie einen NOT IN hinzu , wie zum Beispiel:

SELECT * FROM pg_tables 
WHERE schemaname = 'public' AND tableowner = 'postgres'
AND tablename NOT IN ('table1','table2','table3')