2012-07-20 20 views
49

हाल ही में I went into trouble Django के साथ hstore का उपयोग करने की कोशिश कर रहा है। मैंने इस तरह से hstore स्थापित किया:पहले से स्थापित hstore एक्सटेंशन के साथ एक नया डेटाबेस कैसे बनाएँ?

$ sudo -u postgres psql 
postgres=# CREATE EXTENSION hstore; 
WARNING: => is deprecated as an operator name 
DETAIL: This name may be disallowed altogether in future versions of PostgreSQL. 
CREATE EXTENSION 
postgres=# \dx 
          List of installed extensions 
    Name | Version | Schema |     Description      
---------+---------+------------+-------------------------------------------------- 
hstore | 1.0  | public  | data type for storing sets of (key, value) pairs 
plpgsql | 1.0  | pg_catalog | PL/pgSQL procedural language 
(2 rows) 

और मूर्खता से सोचा कि मेरे नए डेटाबेस में hstore शामिल होगा। ऐसा नहीं है:

$ createdb dbtest 
$ psql -d dbtest -c '\dx' 
       List of installed extensions 
    Name | Version | Schema |   Description   
---------+---------+------------+------------------------------ 
plpgsql | 1.0  | pg_catalog | PL/pgSQL procedural language 
(1 row) 

क्या नव निर्मित डेटाबेस में स्वचालित रूप से hstore है?

उत्तर

96

लंबी कहानी कम:

Template1 डेटाबेस में hstore स्थापित करें:

psql -d template1 -c 'create extension hstore;' 

चरण-दर-चरण विवरण:

रूप the PostgreSQL documentation द्वारा कहा गया :

एक्सटेंशन बनाएं वर्तमान डेटाबेस में एक नया एक्सटेंशन लोड करता है।

एक्सटेंशन स्थापित करना डेटाबेस-विशिष्ट है। निम्नलिखित आपको वर्तमान डेटाबेस नाम देता है:

$ psql -c 'select current_database()' 
current_database 
------------------ 
username 
(1 row) 

यदि आपके पास उपयोगकर्ता नाम के बाद नामित डेटाबेस है। अब dbtest:

$ psql -d dbtest -c 'select current_database()' 
current_database 
------------------ 
dbtest 
(1 row) 

ठीक है, आपको मिल गया। अब, स्थापित होस्टोर के साथ नए डेटाबेस बनाने के लिए, आपको इसे template1 डेटाबेस में स्थापित करना होगा। the doc के अनुसार:

डेटा बनाएं वास्तव में मौजूदा डेटाबेस की प्रतिलिपि बनाकर काम करता है। डिफ़ॉल्ट रूप से, यह टेम्पलेट 1 नामक मानक सिस्टम डेटाबेस की प्रतिलिपि बनाता है।

के इस करते हैं:

$ psql -d template1 -c 'create extension hstore;' 

और जाँच है कि यह काम करता है:

$ createdb dbtest 
$ psql -d dbtest -c '\dx' 
       List of installed extensions 
    Name | Version | Schema |     Description      
---------+---------+------------+-------------------------------------------------- 
hstore | 1.0  | public  | data type for storing sets of (key, value) pairs 
plpgsql | 1.0  | pg_catalog | PL/pgSQL procedural language 
(2 rows) 

हो गया!

+10

+1 सही होने और इसे सभी को एक उपयोगी प्रारूप में डालने के लिए +1। कोई 'टेम्पलेट 1' की तुलना में एक अलग डेटाबेस का उपयोग करने पर विचार कर सकता है। कोई भी डेटाबेस टेम्पलेट के रूप में कार्य कर सकता है: 'डेटाबेस टेम्पलेट टेम्पलेट बनाएं'। या, आपके पास 'template1' में अतिरिक्त सामान होने के बाद, आप (डिफ़ॉल्ट रूप से खाली)' template0' का उपयोग कर सकते हैं। –