मैं PostgreSQL में फोन नंबर कैसे स्टोर करूं?


16

चलो मान लेते हैं कि मैं एक डेटाबेस में फोन नंबर स्टोर करना चाहता हूं। मैं संयुक्त राज्य के बाहर से फोन नंबर स्वीकार कर सकता हूं। मैं इन फ़ोन नंबरों को कैसे संग्रहीत करूंगा?


जवाबों:


22

libphonenumber

जब भी संभव हो हमेशा विहित रूप का उपयोग करें। और अधिक सामान्य रूप बेहतर है। यदि कोई मानक है, तो इसका उपयोग करें। इस समस्या के लिए, चलिए Google के libphonenumber का उपयोग करते हैं , pg-libphonenumber के प्रॉक्सी द्वारा ।

CREATE EXTENSION pg_libphonenumber;

यह वर्तमान में उस phone_numberप्रकार को स्थापित करता है जिसमें तुलना ऑपरेटर और फ़ंक्शन हैं। यह एक अंतरराष्ट्रीय विहित रूप में संख्या को संग्रहीत करता है। मेरी राय में यह सबसे अच्छा समझौता है।

parse_phone_number('textnumber', 'CountryCode');

क्योंकि हम बता सकते हैं कि जब फोन नंबर एक दूसरे के बराबर होते हैं और हम एक आंतरिक सामान्य रूप प्रदान करते हैं, तो हम ऐसा कर सकते हैं।

SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');

(रिटर्न सही)। इसका मतलब यह भी है कि DISTINCTकाम करता है इसलिए हम ऐसा कर सकते हैं ताकि आप ऊपर जो प्रभाव चाहते हैं उसे प्राप्त कर सकें।

CREATE TABLE foo
AS
  SELECT DISTINCT parse_phone_number(ph, 'AU')
  FROM ( VALUES
    ('0370101234'),
    ('03 7010 1234'),
    ('(03) 7010 1234')
  ) AS t(ph);
SELECT 1

उस में डालता है ।।

 parse_phone_number 
--------------------
 +61 3 7010 1234
(1 row)

8
दुर्भाग्य से, पैकेज 1 वर्ष से अधिक समय तक अल्फ़ा स्थिति में लगता है ... यदि आप इसे उत्पादन में उपयोग करने का प्रयास करते हैं तो उच्च देखभाल की सिफारिश की जाती है।
जोनलो

2
@joanolo आप सही हैं, लेकिन ऐसा लगता है कि एक नए योगदानकर्ता, इवान कैरोल ने आज ही एक नई प्रतिबद्धता बनाई है ... कोई व्यक्ति ईवान की ओर से इस सभी आत्म-प्रचार पर विचार करेगा, लेकिन मैंने इस आत्म-उत्तर को भी सक्रिय कर दिया क्योंकि वह सक्रिय है विस्तार में योगदान ...
डेरियो

3
मैंने केवल प्रलेखन के लिए "योगदान" दिया। और, मैंने ऐसा किया था इससे पहले कि मैं एक ही फैशन में पोस्ट किया था मैं हमेशा प्रलेखन में सुधार करने के लिए करता हूं। मैं किसी भी उपयोगी अर्थ में "योगदानकर्ता" नहीं हूं। मेरे पास कमिट नहीं है। मैं C ++ कोड नहीं लिखता। मैं बस PgSQL में libphonenumber बाइंडिंग और उनके बारे में जानने वाले और उनका उपयोग करने के तरीके के बारे में जानने के लिए भावुक हूं।
इवान कैरोल

5
प्रलेखन में योगदान देने में योगदान दे रहा है। ;) और मैं इस पोस्ट के कारण मेरी (सुरक्षित, गैर महत्वपूर्ण) परियोजना में libphonenumber का उपयोग करूंगा। धन्यवाद।
डारियो

4
इसके लायक होने के लिए, हम डेटाबेस में जाने से पहले संख्या को सामान्य करने के लिए libphonenumber का उपयोग करते हैं - इस तरह से हमें (लेखन के समय) पर निर्भर होने की आवश्यकता नहीं है अल्फा-गुणवत्ता वाले प्लगइन्स को पोस्ट किया जाता है जो RDS में उपयोग नहीं किए जा सकते हैं और अन्य क्लाउड-आधारित परिनियोजन लागू करता है।
जॉन हैमिलिंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.