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

दूसरे कॉलम पर आधारित PostgreSQL अनुक्रम

कोई बात नहीं! हम दो टेबल बनाने जा रहे हैं, things और stuff . stuff वह तालिका होगी जिसका वर्णन आप अपने प्रश्न में करेंगे, और things यह वही है जिसका उल्लेख है:

CREATE TABLE things (
    id serial primary key,
    name text
);

CREATE TABLE stuff (
    id integer references things,
    seq integer NOT NULL,
    notes text,
    primary key (id, seq)
);

फिर हम things सेट करेंगे एक ट्रिगर के साथ जो हर बार एक पंक्ति बनाए जाने पर एक नया क्रम बनाएगा:

CREATE FUNCTION make_thing_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  execute format('create sequence thing_seq_%s', NEW.id);
  return NEW;
end
$$;

CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();

अब हम thing_seq_1 . के साथ समाप्त करेंगे , thing_seq_2 , आदि, आदि...

अब stuff . पर एक और ट्रिगर ताकि यह हर बार सही क्रम का उपयोग करे:

CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  NEW.seq := nextval('thing_seq_' || NEW.id);
  RETURN NEW;
end
$$;

CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();

यह सुनिश्चित करेगा कि जब पंक्तियाँ stuff में जाती हैं , id कॉलम का उपयोग nextval . को कॉल करने के लिए सही क्रम खोजने के लिए किया जाता है चालू।

यहाँ एक प्रदर्शन है:

test=# insert into things (name) values ('Joe');
INSERT 0 1
test=# insert into things (name) values ('Bob');
INSERT 0 1
test=# select * from things;
 id | name
----+------
  1 | Joe
  2 | Bob
(2 rows)

test=# \d
              List of relations
 Schema |     Name      |   Type   |  Owner
--------+---------------+----------+----------
 public | stuff         | table    | jkominek
 public | thing_seq_1   | sequence | jkominek
 public | thing_seq_2   | sequence | jkominek
 public | things        | table    | jkominek
 public | things_id_seq | sequence | jkominek
(5 rows)

test=# insert into stuff (id, notes) values (1, 'Keychain');
INSERT 0 1
test=# insert into stuff (id, notes) values (1, 'Pet goat');
INSERT 0 1
test=# insert into stuff (id, notes) values (2, 'Family photo');
INSERT 0 1
test=# insert into stuff (id, notes) values (1, 'Redundant lawnmower');
INSERT 0 1
test=# select * from stuff;
 id | seq |        notes
----+-----+---------------------
  1 |   1 | Keychain
  1 |   2 | Pet goat
  2 |   1 | Family photo
  1 |   3 | Redundant lawnmower
(4 rows)

test=#


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानिक डेटाबेस बनाने में त्रुटि। त्रुटि:पुस्तकालय /usr/pgsql-9.1/lib/rtpostgis-2.0.so लोड नहीं कर सका

  2. PostgreSQL के लिए ट्यूनिंग इनपुट/आउटपुट (I/O) संचालन

  3. PostgreSQL में यूनिक्स टाइमस्टैम्प लौटाएं

  4. PostreSQL में केवल नई पंक्तियाँ कैसे सम्मिलित करें?

  5. पाठ और वर्चर के बीच अंतर (चरित्र भिन्न)