PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres 9.6+ में लंबाई N की एक यादृच्छिक, अद्वितीय, अल्फ़ान्यूमेरिक आईडी कैसे उत्पन्न करें?

इसे समझ लिया, यहाँ एक फ़ंक्शन है जो इसे करता है:

CREATE OR REPLACE FUNCTION generate_uid(size INT) RETURNS TEXT AS $$
DECLARE
  characters TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  bytes BYTEA := gen_random_bytes(size);
  l INT := length(characters);
  i INT := 0;
  output TEXT := '';
BEGIN
  WHILE i < size LOOP
    output := output || substr(characters, get_byte(bytes, i) % l + 1, 1);
    i := i + 1;
  END LOOP;
  RETURN output;
END;
$$ LANGUAGE plpgsql VOLATILE;

और फिर इसे चलाने के लिए बस यह करें:

generate_uid(10)
-- '3Rls4DjWxJ'

चेतावनी

ऐसा करते समय आपको यह सुनिश्चित करने की आवश्यकता है कि आपके द्वारा बनाई जा रही आईडी की लंबाई समय के साथ टकराव से बचने के लिए पर्याप्त है क्योंकि आपके द्वारा बनाई गई वस्तुओं की संख्या बढ़ती है, जो जन्मदिन विरोधाभास . तो आप संभवतः 10 . से अधिक लंबाई (या बहुत अधिक) चाहते हैं किसी भी सामान्य रूप से बनाई गई वस्तु के लिए, मैंने अभी 10 . का उपयोग किया है एक साधारण उदाहरण के रूप में।

उपयोग

परिभाषित फ़ंक्शन के साथ, आप इसे तालिका परिभाषा में उपयोग कर सकते हैं, जैसे:

CREATE TABLE collections (
  id TEXT PRIMARY KEY DEFAULT generate_uid(10),
  name TEXT NOT NULL,
  ...
);

और फिर डेटा डालते समय, जैसे:

INSERT INTO collections (name) VALUES ('One');
INSERT INTO collections (name) VALUES ('Two');
INSERT INTO collections (name) VALUES ('Three');
SELECT * FROM collections;

यह स्वचालित रूप से id उत्पन्न करेगा मान:

    id     |  name  | ...
-----------+--------+-----
owmCAx552Q | ian    |
ZIofD6l3X9 | victor |

उपसर्ग के साथ प्रयोग

या हो सकता है कि आप लॉग में या अपने डीबगर में एक आईडी देखते समय सुविधा के लिए एक उपसर्ग जोड़ना चाहते हैं (स्ट्राइप यह कैसे करता है ), इस तरह:

CREATE TABLE collections (
  id TEXT PRIMARY KEY DEFAULT ('col_' || generate_uid(10)),
  name TEXT NOT NULL,
  ...
);

INSERT INTO collections (name) VALUES ('One');
INSERT INTO collections (name) VALUES ('Two');
INSERT INTO collections (name) VALUES ('Three');
SELECT * FROM collections;

      id       |  name  | ...
---------------+--------+-----
col_wABNZRD5Zk | ian    |
col_ISzGcTVj8f | victor |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में मनमाने ढंग से कई पंक्तियों को कॉलम में बदलना

  2. क्या PostgreSQL 12.1 के साथ MacOS कैटालिना पर वर्चुअलएन्व में psycopg2 स्थापित करने में कोई समस्या है?

  3. पीएल/पीजीएसक्यूएल में गतिशील रूप से प्रश्नों को निष्पादित करना

  4. बाहर से एक डॉकटर कंटेनर में Postgresql से कनेक्ट करना

  5. नीचे से ऊपर तक संचयी योग की गणना कैसे करें?