PostgreSQL - ডাটাবেসটির নতুন নাম দিন


126

আমার ডাটাবেসটির নতুন নাম রাখা দরকার তবে আমি যখন PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"এটি করি তখন আমাকে বলেছিল যে এটি সম্ভব নয়।

আমি এটা কিভাবে করবো?

( উইন্ডোজএক্সপি-তে 8.3 সংস্করণ )

হালনাগাদ

  • প্রথম ত্রুটির বার্তা: কারণ এটির সাথে আমি সংযুক্ত ছিলাম না। সুতরাং আমি অন্য একটি ডাটাবেস নির্বাচন করেছি এবং প্রশ্নগুলি করেছি।

  • আমি দ্বিতীয় ত্রুটি বার্তাটি পেয়ে বলছি যে এটি ব্যবহারকারীর সংযোগ এসেছে। আমি PGAdminস্ক্রিনে দেখতে পাচ্ছি যে এর অনেকগুলি রয়েছে PIDতবে তারা নিষ্ক্রিয় ... আমি কীভাবে তাদের হত্যা করব তা দেখছি না।


1
কেন এটি পারবেন না তা আপনি বিশদভাবে বলতে পারেন। আমি সবেমাত্র এটি করেছি (যদিও ভিন্ন প্ল্যাটফর্মে) এবং এটি কাজ করেছে
ভিঙ্কো ভ্র্যাসালোভিক

1
সঠিক ত্রুটি বার্তাটি কী এবং আপনি পোস্টগ্রিস ডক্সে এই ত্রুটিটি দেখেছেন? হতে পারে যে আচরণের একটি নিখুঁত কারণ আছে। সাধারণত নামকরণের কাজ করা উচিত।
15x5 এ আনক্সিস্ট

প্রশ্নটি আপডেট হয়েছে
প্যাট্রিক দেশজার্ডিনস

কেন শুধু ডাটাবেস পুনরায় চালু করবেন না?
এএক্সএক্সিস্ট

সঠিক ত্রুটি বার্তাটি কী এবং আপনি পোস্টগ্রিস ডক্সে এই ত্রুটিটি দেখেছেন? হতে পারে যে আচরণের একটি নিখুঁত কারণ আছে। সাধারণত নামকরণের কাজ করা উচিত। আপনার যদি মুলতুবি থাকা বা মৃত সংযোগ নিয়ে সমস্যা থাকে তবে এগুলি থেকে মুক্তি পেতে কেবল ডাটাবেস পুনরায় চালু করুন।

উত্তর:


189

ডাটাবেসের নাম উদ্ধৃত না করার চেষ্টা করুন:

ALTER DATABASE people RENAME TO customers;

এছাড়াও নিশ্চিত করুন যে সেই সময়টিতে অন্য কোনও ক্লায়েন্ট সংযুক্ত নেই। শেষ অবধি, ত্রুটি বার্তাটি ফিরে আসার চেষ্টা করুন যাতে আমরা কিছুটা আরও তথ্য পেতে পারি।


18
যখন নামটিতে মূলধনপত্র থাকে তখন উদ্ধৃতি আবশ্যক।
প্যাট্রিক দেশজার্ডিনস

7
এটি কেস নয়, তবে নামটি .বা একটি থাকলে উদ্ধৃতিও আবশ্যক @
ওমার


উপরের পরামর্শগুলি আমাকে মনে করে যে টেবিলের নামগুলি কেবল ছোট হাতের অক্ষর এবং যদি সম্ভব হয় তবে আন্ডারস্কোরের মধ্যে সীমাবদ্ধ রাখাই ভাল !
আসউইন সানাকান


86

ভবিষ্যতের রেফারেন্সের জন্য, আপনার সক্ষম হওয়া উচিত:

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

নোট করুন যে টেবিল pg_stat_activityকলামটি 9.2 পূর্ববর্তী সংস্করণ pidহিসাবে নামকরণ করা procpidহয়েছিল সুতরাং আপনার পোস্টগ্রিজ এসকিউএল সংস্করণ যদি 9.2 এর চেয়ে কম হয় তবে procpidপরিবর্তে ব্যবহার করুন pid


3
এটা আমার জন্য কাজ করে, থেক্স! তবে pg_stat_activity এ থাকা কলামটির নাম পিড এবং প্রোপিড নয়। ( PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit)
bodman

7

আমি কেবল এটির মধ্যে দৌড়েছি এবং নীচে যা কাজ করেছে:

1) pgAdminএকটি অধিবেশন। psqlপরিবর্তে ব্যবহার করুন।
২) pgBouncerউইন্ডোজে এবং / বা শিডিয়ুলার পরিষেবাগুলি বন্ধ করুন কারণ এগুলি সেশন তৈরি করে


3

ইউনেক্সিস্ট আমাকে মন্তব্য করে ডেটাবেস পুনরায় চালু করতে বললেন এবং এটি কার্যকর! ডাটাবেসটি পুনরায় চালু করা সমস্ত বিদ্যমান সংযোগকে হত্যা করে এবং তারপরে আমি অন্য একটি ডাটাবেসের সাথে সংযুক্ত হয়েছি এবং আমার প্রাথমিক ক্যোয়ারির সাথে এটির পুনরায় নামকরণ করতে সক্ষম হয়েছি।

Thx সব।


3

কোনও নকিকে স্থাপন করার পরিবর্তে (সার্ভার পুনরায় চালু করা) আপনার সেই সংযোগগুলি বন্ধ করার চেষ্টা করা উচিত যা সেগুলি আপনাকে কোথা থেকে এসেছে তা খুঁজে বের করে এবং ক্লায়েন্ট প্রক্রিয়াগুলি বন্ধ করে বা pg_cancel_backend()ফাংশনটি ব্যবহার করে b


0

যে কেউ এই সমস্যাটিতে ডিবিভার ব্যবহার করে এবং এর মতো একটি ত্রুটি বার্তা পেয়েছে তাদের জন্য:

ERROR: database "my_stubborn_db" is being accessed by other users
  Detail: There is 1 other session using the database.

আপনার বর্তমান সংযোগটি সংযোগ বিচ্ছিন্ন করুন এবং আপনার নাম পরিবর্তন করা ডাটাবেসটিকে লক্ষ্য না করে এমন সংযোগের সাথে একই সার্ভারে পুনরায় সংযোগ করুন।

সক্রিয় ডাটাবেস পরিবর্তন করা যথেষ্ট নয়।

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