পোস্টগ্রিএসকিউএল একটি নির্দিষ্ট স্কিমার অধীনে সমস্ত সারণীর মালিক পরিবর্তন করুন


19

আমি এক কমান্ড লাইনে একই স্কিমার অধীনে সমস্ত টেবিলের মালিককে পরিবর্তন করার চেষ্টা করছি। অর্থাৎ, alter table schema_name.* owner to newowner। এটি সম্পাদনের কোন উপায় আছে কি?

উত্তর:


11

পুনরায় স্বীকৃত মালিকানাধীন

একটা নির্দিষ্ট বিশেষাধিকার কমান্ড যে আছে শুধু এই হয় RESASSIGN OWNED। এটি কেবলমাত্র একটি নির্দিষ্ট স্কিমাতে নয়, সমস্ত অবজেক্টকে পুনরায় নিয়োগ দেয়।

স্কিমা-নির্দিষ্ট

আপনি ALTER TABLEনিম্নলিখিতটি দিয়ে কমান্ডগুলি তৈরি করতে পারেন ,

SELECT format(
  'ALTER TABLE %I.%I.%I OWNER TO %I;',
  table_catalog,
  table_schema,
  table_name,
  current_user  -- or another just put it in quotes
)
FROM information_schema.tables
WHERE table_schema = 'mySchema';

পিএসকিএল-এ আপনি এটিকে সঙ্গে সঙ্গে অনুসরণ করে চালাতে পারেন \gexec


8

পিএসকিএল-এর মাধ্যমে খাঁটিভাবে এটি সম্পাদন করার কোনও উপায় আমি জানি না, তবে ব্যাশ ব্যবহার করে আপনি টেবিলগুলি ডাটাবেস $ ডিবিতে তালিকাভুক্ত করতে পারেন:

psql -tc "select tablename from pg_tables where schemaname = '${SCHEMA}';" ${DB}

এবং এর সাথে মালিকানাটি $ মালিকের কাছে স্থানান্তরিত হতে পারে:

psql -c "alter table ${SCHEMA}.${table} owner to ${OWNER}" ${DB}

এটি একসাথে স্ট্রিং আপনাকে দেয়:

 $ for table in `psql -tc "select tablename from pg_tables where schemaname = '${SCHEMA}';" ${DB}` ; do  psql -c "alter table ${SCHEMA}.${table} owner to ${OWNER}" ${DB} ; done

$ DB, $ SCHEMA এবং W OWNER যথাক্রমে ডাটাবেস, স্কিমা (সাধারণত 'পাবলিক') এবং নতুন মালিকের নাম উপস্থাপন করে।


7

আপনি যদি আপনার স্কিমাতে টেবিলের নামগুলি জিজ্ঞাসা করতে পারেন তবে আপনি টেবিলের মালিকানা ALTER করার জন্য উত্স তৈরি করতে পারেন।

উদাহরণ স্বরূপ:

 select 'ALTER TABLE ' || t.tablename || ' OWNER TO new_owner;' 
 from  pg_tables t
 where t.tableowner != 'rdsadmin';

সমস্ত টেবিলের মালিকানা পরিবর্তন করতে কোয়েরিটি ফিরিয়ে দেবে:

ALTER TABLE schema_version OWNER TO ali;
ALTER TABLE users OWNER TO ali; 
ALTER TABLE company OWNER TO ali;
ALTER TABLE books OWNER TO ali;
...

তাহলে আপনি এই চালাতে পারেন :)


1

এই স্ক্রিপ্টটি কৌশলটি করবে।

sh change_owner.sh -n new_owner -S schema_name

sh change_owner.sh -n user1 -S public

Summary:
    Tables/Sequences/Views : 16
    Functions              : 43
    Aggregates             : 1
    Type                   : 2

এখানে https://github.com/trrao/PostgreSQL_Script পাওয়া গেছে


0

উপরের মতো ব্যাশ ব্যবহার করার মতোই তবে আমাকে একটি পাঠ্য ফাইলে আউটপুট দিতে হয়েছিল এবং তারপরে পিএসকিএল-তে ইনপুট দিতে হয়েছিল:

$ psql -qAt -d mydatabase -c "SELECT 'ALTER TABLE '||schemaname||'.'||tablename||' \
                                      OWNER TO new_owner;' \
                                      FROM pg_tables \
                                      WHERE schemaname = 'myschema'" > data.txt


$ psql < data.txt -d mydatabase

এই উপর ভিত্তি করে, কিন্তু ডাটাবেসের আরো বলেন: http://penningpence.blogspot.ca/2014/09/changing-owner-of-multiple-database.html


0

এটি একটি ফাংশন যা আমি স্কিমে টেবিল, দেখুন এবং ফাংশনের মালিকানা পরিবর্তনের জন্য ব্যবহার করি। এটি দ্রুত, পরিষ্কার এবং কার্সারগুলি কীভাবে ব্যবহার করতে হয় তার একটি ভাল উদাহরণ। এছাড়াও, কোন কমান্ড লাইন প্রয়োজন।

নীচে একটি plpgsql ফাংশন মাধ্যমে অনুমতি পরিবর্তন করবে:

CREATE OR REPLACE FUNCTION YOURSCHEMA.do_changeowner(
    newowner text,
    pschem text)
  RETURNS void AS
$BODY$
declare
  tblnames CURSOR FOR
    SELECT tablename FROM pg_tables
    WHERE schemaname = pschem;
  viewnames CURSOR FOR
    SELECT viewname FROM pg_views
    WHERE schemaname = pschem;
  funcnames CURSOR FOR
    SELECT p.proname AS name, pg_catalog.pg_get_function_identity_arguments(p.oid) as params
    FROM pg_proc p 
    JOIN pg_namespace n ON n.oid = p.pronamespace 
    WHERE n.nspname = pschem;

begin

  FOR stmt IN tblnames LOOP
    EXECUTE 'alter TABLE ' || pschem || '.' || stmt.tablename || ' owner to ' || newowner || ';';
  END LOOP;
  FOR stmt IN viewnames LOOP
    EXECUTE 'alter VIEW ' || pschem || '.' || stmt.viewname || ' owner to ' || newowner || ';';
  END LOOP;
  FOR stmt IN funcnames LOOP
    EXECUTE 'alter FUNCTION ' || pschem || '.' || stmt.name || '(' ||  stmt.params || ') owner to ' || newowner || ';';
  END LOOP;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.