इसे समझ लिया, यहाँ एक फ़ंक्शन है जो इसे करता है:
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 |