sql >> データベース >  >> RDS >> PostgreSQL

データベース内の一部のテーブルの所有権をpostgresから別のユーザーに変更するにはどうすればよいですか?

    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')
    



    1. すでに定義されている環境変数にputenv()が必要なのはなぜですか?

    2. 警告:mysqli_connect():(HY000 / 1045):ユーザー'username' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    3. where句を使用したスローカウントクエリ

    4. MariaDBでのSQRT()のしくみ