9

मैं समस्याओं परीक्षण हो रही Postgresql और रेल के साथ काम करने आ रही हैं 3.PGError: त्रुटि: स्रोत डेटाबेस "Template1" अन्य उपयोगकर्ताओं

दोनों के विकास और उत्पादन डेटाबेस मैं प्राप्त कर सकते हैं ठीक से काम करने के द्वारा पहुँचा जा रहा है, फिर भी जब मैं rake या db:test:prepare, चलाने के परीक्षण डेटाबेस निम्न त्रुटियों फेंकता आदि

PGError: ERROR: source database "template1" is being accessed by other users

अद्यतन

, ऐसा लगता है कि एक template0 बजायका उपयोग करना चाहिए चारों ओर Googling पोस्टग्रेज़ में नया डेटाबेस बनाने के लिए createb का उपयोग करते समय। सामान्य में "तो मैं कारण हटा दूंगा। लेकिन लक्षण "फैशन, मैं vendor/rails/railities/lib/task/databases.rake और परिवर्तित लाइन 109 पाया पढ़ने के लिए:

createdb #{enc_option} \ 
-U "#{abcs["test"]["username"]}" \ 
-T template0 #{abcs["test"]["database"]} 

लेकिन मैं सच में नहीं चाहता है कि, जैसा कि मैंने एक रत्न, एक और काम में से किसी एक पता है कि के रूप में रेल का उपयोग कर रहा चारों ओर या ठीक है?

database.yml:

development: 
    adapter: postgresql 
    encoding: unicode 
    database: test1234_development 
    pool: 5 
    username: holden 
    password: postgres 

test: 
    adapter: postgresql 
    encoding: unicode 
    database: test1234_test 
    pool: 5 
    username: holden 
    password: postgres 

पूर्ण त्रुटि:

NOTICE: database "test1234_test" does not exist, skipping
PGError: ERROR: source database "template1" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
: CREATE DATABASE "test1234_test" ENCODING = 'unicode'

उत्तर

13

लघु कहानी: किसी मौजूदा डेटाबेस को कॉपी करके CREATE DATABASE काम करता है। यदि कोई अन्य सत्र उससे जुड़ा हुआ है तो PostgreSQL आपको डेटाबेस की प्रतिलिपि नहीं देगा। यदि अन्य उपयोगकर्ताओं द्वारा टेम्पलेट 1 का उपयोग किया जा रहा है, CREATE DATABASE विफल हो जाएगा।

आपको जिस प्रश्न का उत्तर देने की आवश्यकता है: अन्य सत्र टेम्पलेट 1 से क्यों जुड़े हुए हैं?

बिंदु आप एक डेटाबेस क्लस्टर, template0 प्रारंभ और Template1 ही कर रहे हैं पर template0 और Template1

के बीच का अंतर। CREATE DATABASE का उपयोग करके आपके द्वारा बनाए गए प्रत्येक डेटाबेस में कोई भी स्थान-विशिष्ट सामग्री उपलब्ध कराई जानी चाहिए, इसे टेम्पलेट 1 में जाना चाहिए। इसलिए, उदाहरण के लिए, यदि आप टेम्पलेट 1 में प्रक्रियात्मक लैंगेज पीएल/पायथन जोड़ते हैं, तो बाद में आपके द्वारा बनाए गए प्रत्येक डेटाबेस में पीएल/पायथन शामिल होगा।

डेटाबेस टेम्पलेट 0 का उद्देश्य "कुंवारी" टेम्पलेट होना है। इसमें केवल मानक डेटाबेस ऑब्जेक्ट्स होना चाहिए - क्लस्टर को प्रारंभ करके बनाए गए। एक "कुंवारी" टेम्पलेट के रूप में, इसे कभी नहीं बदला जाना चाहिए। कभी नहीँ।

यदि आपको एन्कोडिंग और लोकेल सेटिंग्स (संयोजन) निर्दिष्ट करने की आवश्यकता है, तो आप टेम्पलेट 0 की प्रतिलिपि बनाकर ऐसा कर सकते हैं। आप टेम्पलेट 1 की प्रतिलिपि बनाकर ऐसा नहीं कर सकते हैं।

+6

आह ... परीक्षण चलाने की कोशिश करते समय मैंने नौसेना खोल दी थी। इसे बंद करने से डेटाबेस निर्माण सफल हो गया। धन्यवाद – holden

+0

हाँ, मेरे पास pgAdmin खुला था और यह त्रुटि Django इकाई परीक्षण चला रही थी।मैंने सोचा कि शायद वेब ब्राउज़र पर एक सत्र खुला था। मैंने सर्वर के लिए सभी ब्राउज़र टैब बंद कर दिए, और अपाचे 2 सेवा को रोकने का प्रयास किया। फिर भी यह त्रुटि उत्पन्न कर रहा था। मैंने pgAdmin बंद कर दिया और यह ठीक चला गया! जबरदस्त हंसी। धन्यवाद। – Furbeenator

0

डेटाबेस पुनर्स्थापित करने के लिए जब मैं रेल सर्वर WEBrick चल पर डिफ़ॉल्ट रूबी था की कोशिश करते हुए मैं भी यह त्रुटि आई:

$ bin/rake db:reset 
PG::Error: ERROR: database "dev" is being accessed by other users 
DETAIL: There is 1 other session using the database. 
: DROP DATABASE IF EXISTS "dev" 

अन्य उपयोगकर्ता यहां चल रहे रेल एप्लिकेशन था। CTRL + सी, के साथ सर्वर को बंद करने के बाद मैं किसी भी समस्या के बिना डेटाबेस रीसेट कमांड को फिर से चलाने में सक्षम था।

यह भी समझ में आता है। Mike Sherrill also points out के रूप में, यदि कोई अन्य वर्तमान में उससे कनेक्ट है, तो आप डेटाबेस को नहीं छोड़ सकते हैं।

0

यह समस्या तब होती हैं जब आप लॉग ऑन किया था (psql Template1 या psql template0) Template1 और template0 डेटाबेस और बाहर निकलने में आदेश नीचे का उपयोग कर।

Ctrl + z

बेहतर तरीका postgres नीचे db उपयोग से मौजूद फिर कमांड समस्या नहीं पैदा करेगा:

\ क्ष + दर्ज

वहाँ, 2 समाधान कर रहे हैं, तो समस्या है ।

समाधान - जैसे 1

पुनः प्रारंभ posgres सेवा।

sudo सेवा PostgreSQL पुनः आरंभ

समाधान - 2

sudo ps aux | ग्रेप Template1

सुनिश्चित करें कि इस प्रक्रियाओं

postgres नहीं हटाते हैं 8363 0.0 0.0 111,760 7832 अंक/11 टी 09:49 00:00 /usr/lib/postgresql/9.5/bin/psql Template1 अंकिट 1811 9 0.0 0.0 14224 9 76 अंक/14 एस + 12:33 0:00 grep --color = auto template1

शेष प्रक्रिया को कमांड का उपयोग करके मारना चाहिए।

sudo मार -9

अब डाटाबेस फिर से बनाने का प्रयास करें।

आशा है कि यह आपकी मदद करेगा।

अंकित एच गांधी।

1

बस डेटाबेस की सेवा को पुनरारंभ करें।

0

मैंने अपना सिस्टम पुनरारंभ किया और त्रुटि अभी भी दिख रही थी। हालांकि, मैंने इसे हल करने के लिए नीचे दिए गए चरणों का पालन किया।

  1. बंद करो सभी प्रक्रियाओं कमांड प्रॉम्प्ट (प्रशासन) में ऐसा करने से postgres पोर्ट 5432 का उपयोग कर: कमांड प्रॉम्प्ट में टाइप करें netstat -ano0.0.0.0:5432 के स्थानीय पते के साथ पिड पाएं। फिर कार्य को मारने के लिए taskkill /pid {pid} /f का उपयोग करें।

  2. विंडोज सेवाओं में पोस्टग्रेज़ सेवा शुरू करें।

संबंधित मुद्दे