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

Plpgsql में अद्वितीय यादृच्छिक तार उत्पन्न करें

कोई repeat नहीं है plpgsql में बयान। आसान loop का इस्तेमाल करें

CREATE OR REPLACE FUNCTION random_token(_table TEXT, _column TEXT, _length INTEGER) RETURNS text AS $$
DECLARE
  alphanum CONSTANT text := 'abcdefghijkmnopqrstuvwxyz23456789';
  range_head CONSTANT integer := 25;
  range_tail CONSTANT integer := 33;
  random_string text;
  ct int;
BEGIN
  LOOP
    SELECT substring(alphanum from trunc(random() * range_head + 1)::integer for 1) ||
      array_to_string(array_agg(substring(alphanum from trunc(random() * range_tail + 1)::integer for 1)), '')
      INTO random_string FROM generate_series(1, _length - 1);
    EXECUTE FORMAT('SELECT count(*) FROM %I WHERE %I = %L', _table, _column, random_string) INTO ct;
    EXIT WHEN ct = 0;
  END LOOP;
  RETURN random_string;
END
$$ LANGUAGE plpgsql;

ध्यान दें, random_string format() . का पैरामीटर होना चाहिए ।

अद्यतन। एबेलिस्टो के सटीक संकेत के अनुसार, यह एक बड़ी तालिका के लिए तेज़ होना चाहिए:

DECLARE
  dup boolean;
...
    EXECUTE FORMAT('SELECT EXISTS(SELECT 1 FROM %I WHERE %I = %L)', _table, _column, random_string) INTO dup;
    EXIT WHEN NOT dup;
...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फ़ंक्शन से लौटाए गए रिकॉर्ड में कॉलम जुड़े हुए हैं

  2. Postgresql के भीतर वितरित लेनदेन को कैसे संसाधित करें?

  3. Sqitch Rework कमांड के साथ तालिका बदलना

  4. PostgreSQL (psql) में नल आउटपुट के लिए वर्तमान सेटिंग कैसे दिखाएं

  5. पोस्टग्रेज़ नई पंक्ति का संदर्भ देने वाली पंक्ति के लिए NULL मान फ़ंक्शन करता है