PostgreSQL की छिपी विशेषताएं [बंद]


80

मुझे आश्चर्य है कि यह अभी तक पोस्ट नहीं किया गया है। Postgres में कोई भी रोचक ट्रिक जो आप जानते हैं? अस्पष्ट विन्यास विकल्प और स्केलिंग / परफेक्ट ट्रिक्स का विशेष रूप से स्वागत है।

मुझे यकीन है कि हम संबंधित MySQL थ्रेड पर 9 टिप्पणियों को हरा सकते हैं :)

जवाबों:


76

चूंकि पोस्टग्रेज्स MySQL की तुलना में बहुत अधिक समझदार है, इसलिए ;-) पर रिपोर्ट करने के लिए कई "ट्रिक्स" नहीं हैं;

मैनुअल कुछ अच्छा है प्रदर्शन सुझाव।

ध्यान रखने के लिए कुछ अन्य प्रदर्शन संबंधी बातें:

  • सुनिश्चित करें कि ऑटोवैक्यूम चालू है
  • सुनिश्चित करें कि आप अपने postgres.conf (प्रभावी कैश आकार, साझा बफ़र्स, कार्य मेम ... धुन करने के लिए बहुत सारे विकल्प) के माध्यम से गए हैं।
  • अपने "वास्तविक" डेटाबेस कनेक्शन को न्यूनतम रखने के लिए pgpool या pgbouncer का उपयोग करें
  • जानें कैसे समझाएं और काम करता है विश्लेषण व्याख्या। आउटपुट पढ़ना सीखें।
  • एक सूचकांक के अनुसार ग्राहक डिस्क पर डेटा को सॉर्ट करता है। नाटकीय रूप से बड़े (ज्यादातर) रीड-ओनली तालिकाओं के प्रदर्शन में सुधार कर सकते हैं। क्लस्टरिंग एक बार का ऑपरेशन है: जब तालिका को बाद में अपडेट किया जाता है, तो परिवर्तन क्लस्टर नहीं किए जाते हैं।

यहाँ कुछ चीजें हैं जो मुझे उपयोगी लगीं जो कि कॉन्फ़िगर या प्रदर्शन से संबंधित नहीं हैं।

वर्तमान में क्या हो रहा है यह देखने के लिए:

select * from pg_stat_activity;

खोज कार्य:

select * from pg_proc WHERE proname ~* '^pg_.*'

डेटाबेस का आकार ज्ञात करें:

select pg_database_size('postgres');
select pg_size_pretty(pg_database_size('postgres'));

सभी डेटाबेस का आकार ज्ञात करें:

select datname, pg_size_pretty(pg_database_size(datname)) as size
  from pg_database;

टेबल और इंडेक्स का आकार ज्ञात करें:

select pg_size_pretty(pg_relation_size('public.customer'));

या, सभी तालिकाओं और अनुक्रमितों को सूचीबद्ध करने के लिए (शायद यह देखने के लिए आसान है):

select schemaname, relname,
    pg_size_pretty(pg_relation_size(schemaname || '.' || relname)) as size
  from (select schemaname, relname, 'table' as type
          from pg_stat_user_tables
        union all
        select schemaname, relname, 'index' as type
          from pg_stat_user_indexes) x;

ओह, और आप लेनदेन को घोंसला कर सकते हैं, आंशिक लेनदेन ++ रोलबैक कर सकते हैं

test=# begin;
BEGIN
test=# select count(*) from customer where name='test';
 count 
-------
     0
(1 row)
test=# insert into customer (name) values ('test');
INSERT 0 1
test=# savepoint foo;
SAVEPOINT
test=# update customer set name='john';
UPDATE 3
test=# rollback to savepoint foo;
ROLLBACK
test=# commit;
COMMIT
test=# select count(*) from customer where name='test';
 count 
-------
     1
(1 row)

धन्यवाद। संपादित करें: ग्राहक के बारे में जानकारी जोड़ी गई।
tommym

डेटाबेस आकार दिखाना 8.4 बीटा psql में "\ l" की विशेषताओं में से एक है, मैंने देखा है। तब तक, मुझे लगता है कि 8.3 में एक pg_size_pretty () फ़ंक्शन है जो बाइट्स में एक आकार को छोटा करता है।
अरकनिद

पारितोषिक के लिए धन्यवाद! Pg_size_pretty के बारे में पता नहीं था। मैंने इसे शामिल करने के लिए अपना उत्तर अपडेट कर दिया है।
टॉमी

3
प्रतिस्थापित करें (उत्तर, 'प्रति कह', 'प्रति से')
असजो

23

Postgresql को बेहतर तरीके से करने देने की सबसे आसान ट्रिक (कोर्स के उचित इंडेक्स को सेट करने और इस्तेमाल करने के अलावा) बस इसके साथ काम करने के लिए अधिक रैम देना है (यदि आपने पहले से ऐसा नहीं किया है)। अधिकांश डिफ़ॉल्ट इंस्टॉलेशन पर साझा किए गए_बफ़र्स के लिए मान बहुत कम है (मेरी राय में)। आप सेट कर सकते हैं

साझा_बफर्स

in postgresql.conf मेमोरी की मात्रा का अनुमान लगाने के लिए इस संख्या को 128 से विभाजित करें (एमबी में) पोस्टग्रेज दावा कर सकते हैं। यदि आप इसे पर्याप्त रूप से बढ़ाते हैं, तो यह पोस्टग्रैस्कल फ्लाई बना देगा। Postgresql को पुनरारंभ करना न भूलें।

लिनक्स सिस्टम पर, जब postgresql फिर से शुरू नहीं होगा, तो आप शायद कर्नेल को हटा देंगे। इसके साथ उच्च सेट करें

sysctl -w kernel.shmmax=xxxx

इसे बूट्स के बीच बनाए रखने के लिए, /etc/sysctl.conf में एक कर्नेल .shmmax प्रविष्टि जोड़ें।

Postgresql ट्रिक्स का एक पूरा गुच्छा यहां पाया जा सकता है :


17

Postgres को अपने INTERVAL सपोर्ट की बदौलत एक बहुत ही शक्तिशाली डेटाइम हैंडलिंग सुविधा है।

उदाहरण के लिए:

select NOW(), NOW() + '1 hour';
              now              |           ?column?            
-------------------------------+-------------------------------
 2009-04-18 01:37:49.116614+00 | 2009-04-18 02:37:49.116614+00
(1 row)



select current_date ,(current_date +  interval '1 year')::date;
    date             |  date            
---------------------+----------------
 2014-10-17          | 2015-10-17
(1 row)

आप कई स्ट्रिंग्स को एक INTERVAL प्रकार में डाल सकते हैं।


15

कॉपी

मैं शुरू करूँगा। जब भी मैं SQLite से Postgres पर स्विच करता हूं, मेरे पास आमतौर पर कुछ बड़े डेटासेट होते हैं। कुंजी आपके टेबल को इंसर्ट करने के बजाय COPY FROM से लोड करना है। प्रलेखन देखें:

http://www.postgresql.org/docs/8.1/static/sql-copy.html

निम्नलिखित उदाहरण क्लाइंट के लिए एक टेबल को वर्टिकल बार (!) के रूप में फिल्ड सीमांकक के रूप में कॉपी करता है:

COPY country TO STDOUT WITH DELIMITER '|';

देश तालिका में फ़ाइल से डेटा कॉपी करने के लिए:

COPY country FROM '/usr1/proj/bray/sql/country_data';

यहाँ भी देखें: sqlite3 में तेज़ थोक आवेषण?


2
यह भी सीएसवी आयात के लिए काम में आता है।
क्रिस्टोफीड

हालिया रिलीज़ (कम से कम 8.3, संभवत: पहले) यदि आप उस तालिका को बनाते या बनाते हैं, जिसे आप COPY के समान लेन-देन में पॉप्युलेट कर रहे हैं, तो यह वाल लॉग को स्पर्श नहीं करेगी और आपको और भी तेज़ प्रदर्शन मिलेगा। postgresql.org/docs/8.3/static/populate.html
TREE

12
  • मेरा अब तक का पसंदीदा है generate_series : डमी पंक्तियों को उत्पन्न करने के लिए एक साफ तरीके से।
  • LIMITएक उप-वर्ग के खंड में एक सहसंबंधित मूल्य का उपयोग करने की क्षमता :

    SELECT  (
            SELECT  exp_word
            FROM    mytable
            OFFSET id
            LIMIT 1
            )
    FROM    othertable
    
  • कस्टम समुच्चय (प्रलेखन द्वारा कवर नहीं) में कई मापदंडों का उपयोग करने की योग्यता: एक उदाहरण के लिए मेरे ब्लॉग में लेख देखें ।

1
+1, जनरेट_सरीज () बस वही है जो आपको काफी कुछ चीजों के लिए चाहिए (जैसे जब भी आपको "डमी टेबल" की आवश्यकता हो)। दूसरा स्निपेट पेचीदा भी लगता है।
j_random_hacker 23

9

पोस्टग्रेज के बारे में मुझे जो चीजें पसंद हैं उनमें से एक कॉलम में समर्थित कुछ डेटा प्रकार हैं। उदाहरण के लिए, नेटवर्क पते और एरे को संग्रहीत करने के लिए स्तंभ प्रकार बनाए गए हैं । इन कॉलम प्रकारों के लिए संबंधित कार्य ( नेटवर्क पते / एरे ) आपको क्वेरी के अंदर बहुत से जटिल ऑपरेशन करने देते हैं जो आपको MySQL या अन्य डेटाबेस इंजन में कोड के माध्यम से परिणाम संसाधित करके करना होगा।


2
और आप आसानी से अपने स्वयं के प्रकार बना सकते हैं यदि मानक वाले आपको फिट नहीं करते हैं!
bortzmeyer

8

Arrays वास्तव में एक बार शांत हो जाती है जब आप उन्हें जानते हैं। मान लें कि आप पृष्ठों के बीच कुछ हाइपर लिंक स्टोर करना चाहते हैं। आप इस तरह एक टेबल थोड़े बनाने के बारे में सोचकर शुरू कर सकते हैं:

CREATE TABLE hyper.links (
     tail INT4,
     head INT4
);

यदि आपको पूंछ को अनुक्रमित करने की आवश्यकता है स्तंभ , और आपके पास 200,000,000 लिंक-पंक्तियाँ थीं (जैसे कि विकिपीडिया आपको देगा), तो आप अपने आप को एक विशाल तालिका और एक विशाल सूचकांक के साथ पाएंगे।

हालाँकि, PostgreSQL के साथ, आप इसके बजाय इस तालिका प्रारूप का उपयोग कर सकते हैं:

CREATE TABLE hyper.links (
     tail INT4,
     head INT4[],
     PRIMARY KEY(tail)
);

एक लिंक के लिए सभी शीर्ष प्राप्त करने के लिए आप इस तरह एक कमांड भेज सकते हैं (अनावश्यक (8.4 के बाद से मानक है))

SELECT unnest(head) FROM hyper.links WHERE tail = $1;

यह क्वेरी आश्चर्यजनक रूप से तेज़ है जब इसकी तुलना पहले विकल्प (अनावश्यक () तेज़ है और इंडेक्स रास्ता छोटा है) के साथ की जाती है। इसके अलावा, आपका टेबल और इंडेक्स बहुत कम रैम-मेमोरी और एचडी-स्पेस लेगा, खासकर जब आपकी एरर्स इतनी लंबी होती हैं कि वे टोस्ट टेबल पर संकुचित हो जाती हैं। ऐरे वास्तव में शक्तिशाली हैं।

नोट: जबकि अनावश्यक () एक सरणी से बाहर पंक्तियों को उत्पन्न करेगा, array_agg () एक सरणी में पंक्तियों को एकत्रित करेगा।


6

भौतिकीकृत दृश्य सेटअप करने में बहुत आसान हैं:

CREATE VIEW my_view AS SELECT id, AVG(my_col) FROM my_table GROUP BY id;
CREATE TABLE my_matview AS SELECT * FROM my_view;

यह एक नई तालिका बनाता है, my_matview, कॉलम और my_view के मान के साथ। ट्रिगर या क्रोन स्क्रिप्ट तब डेटा को अद्यतित रखने के लिए सेटअप किया जा सकता है, या यदि आप आलसी हैं:

TRUNCATE my_matview;
INSERT INTO my_matview SELECT * FROM my_view;

6
  • Inheritance..infact मल्टीपल इनहेरिटेंस (जैसा कि पेरेंट-चाइल्ड "इनहेरिटेंस" नहीं 1-टू -1 रिलेशन इनहेरिटेंस है, जो कई वेब फ्रेमवर्क पोस्टग्रेज के साथ काम करते समय कार्यान्वित होता है)।

  • पोस्टजीआईएस (स्थानिक विस्तार), एक अद्भुत ऐड-ऑन जो ज्यामिति कार्यों का व्यापक सेट प्रदान करता है और बॉक्स से बाहर भंडारण का समन्वय करता है। व्यापक रूप से कई ओपन-सोर्स जियो काम (उदाहरण के लिए OpenLayers, MapServer, Mapnik आदि) में उपयोग किया जाता है और निश्चित रूप से MySQL के स्थानिक एक्सटेंशन से बेहतर है।

  • विभिन्न भाषाओं जैसे सी, पायथन, पर्ल आदि में लेखन प्रक्रियाएं (यदि आप एक डेवलपर हैं और डीबी-एडमिन नहीं हैं तो कोड को अपना जीवन आसान बना सकते हैं)।

    इसके अलावा सभी प्रक्रियाओं को बाह्य रूप से (मॉड्यूल के रूप में) संग्रहीत किया जा सकता है और निर्दिष्ट तर्कों द्वारा रनटाइम पर आयात या आयात किया जा सकता है। इस तरह से आप स्रोत को नियंत्रित कर सकते हैं और आसानी से कोड को डिबग कर सकते हैं।

  • आपके डेटाबेस में लागू की गई सभी वस्तुओं पर एक विशाल और व्यापक सूची (यानी टेबल, बाधाएं, सूचकांक, आदि)।

    मुझे हमेशा कुछ प्रश्नों को चलाने और सभी मेटा जानकारी प्राप्त करने के लिए बेहद मददगार लगता है, जैसे कि बाधा नाम और फ़ील्ड, जिस पर उन्हें कार्यान्वित किया गया है, सूचकांक नाम आदि।

    मेरे लिए यह सब बहुत आसान हो जाता है जब मुझे नए डेटा को लोड करना पड़ता है या बड़े तालिकाओं में बड़े पैमाने पर अपडेट करना पड़ता है (मैं स्वचालित रूप से ट्रिगर और ड्रॉप इंडेक्स को अक्षम कर दूंगा) और फिर प्रसंस्करण समाप्त होने के बाद उन्हें फिर से आसानी से फिर से तैयार करता हूं। किसी ने इन प्रश्नों को लिखने में उत्कृष्ट काम किया।

    http://www.alberton.info/postgresql_meta_info.html

  • एक डेटाबेस के तहत कई स्कीमा, आप इसका उपयोग कर सकते हैं यदि आपके डेटाबेस में बड़ी संख्या में टेबल हैं, तो आप स्कीमा को श्रेणियों के रूप में सोच सकते हैं। सभी तालिकाएँ (इसकी परवाह किए बिना, यह स्कीमा है) अभिभावक db में मौजूद अन्य सभी तालिकाओं और कार्यों तक पहुँच है।


+1 मैं विश्वास नहीं कर सकता कि यह कई विरासत है।
एडम जेंट

5

आपको यह समझने की ज़रूरत नहीं है कि आउटपुट "व्याख्या विश्लेषण" कैसे करना है, एक उपकरण है: http://explain.depesz.com


4
select pg_size_pretty(200 * 1024)

इसे PostgreSQL 9.3पकड़ा त्रुटि में
विवेक एस।

@WingedPanther आपकी त्रुटि क्या है? यहां 9.3, इसमें एक त्रुटि भी है (2009 के बाद कोई त्रुटि नहीं है), तो तय है कि आप पूर्णांक को बड़े पूर्णांक तक ले जाने की आवश्यकता है:pg_size_pretty((200 * 1024)::bigint)
माइकल ब्यून

हाँ यह बात है
विवेक एस।

3

pgcrypto : कई प्रोग्रामिंग भाषाओं की तुलना में अधिक क्रिप्टोग्राफ़िक फ़ंक्शन क्रिप्टो मॉड्यूल प्रदान करते हैं, जो डेटाबेस से सभी सुलभ प्रत्यक्ष होते हैं। यह क्रिप्टोग्राफिक सामान अविश्वसनीय रूप से जस्ट गेट राइट के लिए आसान बनाता है।


3

एक डेटाबेस के साथ कॉपी किया जा सकता है:

createb -T old_db new_db

प्रलेखन कहता है:

यह (अभी तक) सामान्य उद्देश्य "COP DATABASE" सुविधा के रूप में नहीं है

लेकिन यह मेरे लिए अच्छा काम करता है और इससे बहुत तेज है

createb new_db

pg_dump old_db | psql new_db


2

फेंक डेटा / वैश्विक चर के लिए मेमोरी भंडारण

आप एक टेबलस्पेस बना सकते हैं जो रैम में रहता है, और टेबल (संभवतः 9.1 में) को टेबल में फेंकने वाले डेटा / वैश्विक चर को संग्रहीत करने के लिए उस टेबलस्पेस में बना सकते हैं जिसे आप पूरे सत्र में साझा करना चाहते हैं।

http://magazine.redhat.com/2007/12/12/tip-from-an-rhce-memory-storage-on-postgresql/

सलाहकार के ताले

ये मैनुअल के अस्पष्ट क्षेत्र में प्रलेखित हैं:

http://www.postgresql.org/docs/9.0/interactive/functions-admin.html

यह कभी-कभार पंक्ति-स्तर के लॉक के मल्टीट्यूड प्राप्त करने की तुलना में अधिक तेज़ होता है, और उनका उपयोग उन मामलों के आसपास काम करने के लिए किया जा सकता है, जहाँ के लिए UPDATE को लागू नहीं किया जाता है (जैसे पुनरावर्ती CTE प्रश्न)।


4
RAM में एक टेबलस्पेस बनाना एक बहुत बुरा विचार है। ऐसा न करें, आप पूरे डेटाबेस के लिए गंभीर और अपरिवर्तनीय भ्रष्टाचार का जोखिम उठाते हैं। UNLOGGEDतालिकाओं का उपयोग करें ।
क्रेग रिंगर

2

यह मेरे कम सुविधाओं की पसंदीदा सूची है।

ट्रांजैक्शनल डीडीएल

लगभग हर SQL स्टेटमेंट Postgres में Transactional है। यदि आप स्वतः पूर्ण बंद करते हैं तो निम्नलिखित संभव है:

drop table customer_orders;
rollback;
select *
from customer_orders;

रेंज प्रकार और बहिष्करण बाधा

मेरी जानकारी के लिए पोस्टग्रैड्स एकमात्र आरडीबीएमएस है जो आपको एक अवरोध पैदा करने देता है जो यह जांचता है कि दो रेंज ओवरलैप हैं। एक उदाहरण एक तालिका है जिसमें "से मान्य" और "तिथि तक मान्य" के साथ उत्पाद की कीमतें हैं:

create table product_price
(
   price_id      serial        not null primary key,
   product_id    integer       not null references products,
   price         numeric(16,4) not null,
   valid_during  daterange not null
);

NoSQL सुविधाएँ

hstore विस्तार प्रदान करता है एक लचीला और बहुत तेजी से कुंजी / मान दुकान है कि जब डेटाबेस की जरूरत के कुछ हिस्सों होने के लिए इस्तेमाल किया जा सकता "स्कीमा-कम"। JSON स्कीमा-कम फैशन में डेटा स्टोर करने का एक और विकल्प है और

insert into product_price 
  (product_id, price, valid_during)
values 
  (1, 100.0, '[2013-01-01,2014-01-01)'),
  (1,  90.0, '[2014-01-01,)');


-- querying is simply and can use an index on the valid_during column
select price
from product_price
where product_id = 42
  and valid_during @> date '2014-10-17';

700.000 पंक्तियों के साथ एक मेज पर ऊपर के लिए निष्पादन योजना:

Index Scan using check_price_range on public.product_price  (cost=0.29..3.29 rows=1 width=6) (actual time=0.605..0.728 rows=1 loops=1)
  Output: price
  Index Cond: ((product_price.valid_during @> '2014-10-17'::date) AND (product_price.product_id = 42))
  Buffers: shared hit=17
Total runtime: 0.772 ms

अतिव्यापी वैधता वाली पंक्तियों को सम्मिलित करने से बचने के लिए एक सरल (और कुशल) अद्वितीय अवरोध को परिभाषित किया जा सकता है:

alter table product_price
  add constraint check_price_range 
  exclude using gist (product_id with =, valid_during with &&)

अनन्तता

भविष्य में एक "वास्तविक" तारीख की आवश्यकता के बजाय पोस्टग्रैजिन अनंत की तारीखों की तुलना कर सकते हैं। उदाहरण के लिए, दिनांक सीमा का उपयोग न करने पर आप निम्नलिखित कार्य कर सकते हैं

insert into product_price 
  (product_id, price, valid_from, valid_until)
values 
  (1,  90.0, date '2014-01-01', date 'infinity');

लिखने योग्य सामान्य टेबल एक्सप्रेशन

आप एकल विवरण में हटा सकते हैं, सम्मिलित कर सकते हैं और चुन सकते हैं:

with old_orders as (
   delete from orders
   where order_date < current_date - interval '10' year
   returning *
), archived_rows as (
   insert into archived_orders 
   select * 
   from old_orders
   returning *
)
select *
from archived_rows;

उपरोक्त 10 वर्ष से पुराने सभी आदेशों को हटा देगा, उन्हें archived_ordersतालिका में ले जाएगा और फिर उन पंक्तियों को प्रदर्शित करेगा जिन्हें स्थानांतरित किया गया था।


2

1.) जब आपको क्वेरी के लिए परिशिष्ट नोटिस की आवश्यकता होती है, तो आप नेस्टेड टिप्पणी का उपयोग कर सकते हैं

SELECT /* my comments, that I would to see in PostgreSQL log */
       a, b, c
   FROM mytab;

2.) एक डेटाबेस में सभी textऔर varcharक्षेत्र से ट्रेलिंग रिक्त स्थान निकालें ।

do $$
declare
    selectrow record;
begin
for selectrow in
select 
       'UPDATE '||c.table_name||' SET '||c.COLUMN_NAME||'=TRIM('||c.COLUMN_NAME||')  WHERE '||c.COLUMN_NAME||' ILIKE ''% '' ' as script
from (
       select 
          table_name,COLUMN_NAME
       from 
          INFORMATION_SCHEMA.COLUMNS 
       where 
          table_name LIKE 'tbl%'  and (data_type='text' or data_type='character varying' )
     ) c
loop
execute selectrow.script;
end loop;
end;
$$;

3.) हम डुप्लिकेट पंक्तियों को हटाने के लिए एक विंडो फ़ंक्शन का उपयोग कर सकते हैं:

DELETE FROM tab 
  WHERE id IN (SELECT id 
                  FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), id 
                           FROM tab) x 
                 WHERE x.row_number > 1);

कुछ PostgreSQL का अनुकूलित संस्करण (ctid के साथ):

DELETE FROM tab 
  WHERE ctid = ANY(ARRAY(SELECT ctid 
                  FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), ctid 
                           FROM tab) x 
                 WHERE x.row_number > 1));

4.) जब हमें सर्वर की स्थिति की पहचान करने की आवश्यकता होती है, तो हम एक फ़ंक्शन का उपयोग कर सकते हैं:

SELECT pg_is_in_recovery();

5.) फ़ंक्शन के डीडीएल कमांड प्राप्त करें।

select pg_get_functiondef((select oid from pg_proc where proname = 'f1'));

6.) PostgreSQL में सुरक्षित रूप से कॉलम डेटा प्रकार बदलना

create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');

select * from test
--Result--
id
character varying
--------------------------
1
11
12

आप उपरोक्त तालिका से देख सकते हैं कि मैंने 'id'
कॉलम के लिए डेटा प्रकार - 'वर्ण भिन्न' का उपयोग किया है । लेकिन यह एक गलती थी, क्योंकि मैं हमेशा पूर्णांक आईडी के रूप में दे रहा हूं। इसलिए यहां वर्चूर का उपयोग करना एक बुरा व्यवहार है। तो आइए कॉलम प्रकार को पूर्णांक में बदलने का प्रयास करें।

ALTER TABLE test ALTER COLUMN id TYPE integer;

लेकिन यह रिटर्न:

त्रुटि: कॉलम “id” पूर्णांक टाइप करने के लिए स्वचालित रूप से नहीं डाला जा सकता है SQL राज्य: 42804 संकेत: रूपांतरण करने के लिए एक USING अभिव्यक्ति निर्दिष्ट करें

इसका मतलब है कि हम केवल डेटा प्रकार नहीं बदल सकते क्योंकि डेटा पहले से ही कॉलम में मौजूद है। चूँकि डेटा टाइप 'कैरेक्टर बदलती' है, इसलिए यह उम्मीद नहीं कर सकता कि यह पूर्णांक के रूप में है, हालांकि हमने केवल पूर्णांक में प्रवेश किया है। इसलिए अब, जैसा कि पोस्टग्रेट्स ने सुझाव दिया है कि हम अपने डेटा को पूर्णांक में डालने के लिए 'उपयोग' की अभिव्यक्ति का उपयोग कर सकते हैं।

ALTER TABLE test ALTER COLUMN id  TYPE integer USING (id ::integer);

यह काम करता हैं।

7.) पता है कि कौन डेटाबेस से जुड़ा है
यह कमोबेश एक निगरानी कमांड है। यह जानने के लिए कि कौन सा उपयोगकर्ता अपने आईपी और पोर्ट सहित किस डेटाबेस से जुड़ा है, निम्न एसक्यूएल का उपयोग करें:

SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;

सर्वर पुनः आरंभ करने के बिना 8.) PostgreSQL कॉन्फ़िगरेशन फ़ाइलों को पुनः लोड करना

PostgreSQL कॉन्फ़िगरेशन पैरामीटर विशेष फ़ाइलों जैसे postgresql.conf और pg_hba.conf में स्थित हैं। अक्सर, आपको इन मापदंडों को बदलने की आवश्यकता हो सकती है। लेकिन कुछ मापदंडों को प्रभावी करने के लिए हमें अक्सर कॉन्फ़िगरेशन फ़ाइल को पुनः लोड करने की आवश्यकता होती है। बेशक, सर्वर को पुनरारंभ करने से यह हो जाएगा। लेकिन उत्पादन के माहौल में, यह डेटाबेस को पुनः आरंभ करने के लिए पसंद नहीं है, जिसका उपयोग हजारों द्वारा किया जा रहा है, बस कुछ मापदंडों को सेट करने के लिए। ऐसी स्थितियों में, हम निम्नलिखित फ़ंक्शन का उपयोग करके सर्वर को पुनरारंभ किए बिना कॉन्फ़िगरेशन फ़ाइलों को फिर से लोड कर सकते हैं:

select pg_reload_conf();

याद रखें, यह सभी मापदंडों के लिए अभ्यस्त काम करता है, कुछ पैरामीटर परिवर्तनों को प्रभावी होने के लिए सर्वर के पूर्ण पुनरारंभ की आवश्यकता होती है।

9.) वर्तमान डेटाबेस क्लस्टर के डेटा निर्देशिका पथ को प्राप्त करना

यह संभव है कि एक प्रणाली में, पोस्टग्रेएसक्यूएल के कई उदाहरण (क्लस्टर) स्थापित किए जाते हैं, आम तौर पर, विभिन्न बंदरगाहों में या तो। ऐसे मामलों में, कौन सी निर्देशिका (भौतिक भंडारण निर्देशिका) का उपयोग किया जाता है, किस उदाहरण से एक व्यस्त कार्य है। ऐसे मामलों में, हम निर्देशिका पथ प्राप्त करने के लिए हमारी रुचि के क्लस्टर में किसी भी डेटाबेस में निम्न कमांड का उपयोग कर सकते हैं:

SHOW data_directory;

समान फ़ंक्शन का उपयोग क्लस्टर की डेटा निर्देशिका को बदलने के लिए किया जा सकता है, लेकिन इसके लिए सर्वर पुनरारंभ की आवश्यकता होती है:

SET data_directory to new_directory_path;

10.) एक CHAR DATE है या नहीं खोजें

create or replace function is_date(s varchar) returns boolean as $$
begin
  perform s::date;
  return true;
exception when others then
  return false;
end;
$$ language plpgsql;

उपयोग: निम्नलिखित सत्य वापस आ जाएगा

select is_date('12-12-2014')
select is_date('12/12/2014')
select is_date('20141212')
select is_date('2014.12.12')
select is_date('2014,12,12')

11.) PostgreSQL में मालिक को बदलें

REASSIGN OWNED BY sa  TO postgres;

12.) PGADMIN PLPGSQL DEBUGGER

अच्छी तरह से यहाँ समझाया


+1 2 , 3 , 6 , 9 के लिए

0

यह एक पुराने डेटाबेस का नाम बदलने के बजाय mysql कर सकता है सुविधाजनक है। बस निम्नलिखित आदेश का उपयोग कर:

ALTER DATABASE name RENAME TO new_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.