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

PostgreSQL 8.3 में अशक्त और अद्वितीय बाधा के साथ वृद्धि क्षेत्र

एक और टेबल, जिसमें कई अद्वितीय इंडेक्स हैं:

create table utest(id integer, position integer not null, unique(id, position));
test=# \d utest
      Table "public.utest"
  Column  |  Type   | Modifiers 
----------+---------+-----------
 id       | integer | 
 position | integer | not null
Indexes:
    "utest_id_key" UNIQUE, btree (id, "position")

कुछ डेटा:

insert into utest(id, position) select generate_series(1,3), 1;
insert into utest(id, position) select generate_series(1,3), 2;
insert into utest(id, position) select generate_series(1,3), 3;

test=# select * from utest order by id, position;
 id | position 
----+----------
  1 |        1
  1 |        2
  1 |        3
  2 |        1
  2 |        2
  2 |        3
  3 |        1
  3 |        2
  3 |        3
(9 rows)

मैंने एक प्रक्रिया बनाई है जो स्थिति मानों को उचित क्रम में अपडेट करती है:

create or replace function update_positions(i integer, p integer) 
  returns void as $$
declare
  temprec record;
begin
  for temprec in 
    select * 
      from utest u 
      where id = i and position >= p 
      order by position desc 
  loop
    raise notice 'Id = [%], Moving % to %', 
      i, 
      temprec.position, 
      temprec.position+1;

    update utest 
      set position = position+1 
      where position=temprec.position and id = i;
  end loop;
end;
$$ language plpgsql;

कुछ परीक्षण:

test=# select * from update_positions(1, 2);
NOTICE:  Id = [1], Moving 3 to 4
NOTICE:  Id = [1], Moving 2 to 3
 update_positions 
------------------

(1 row)

test=# select * from utest order by id, position;
 id | position 
----+----------
  1 |        1
  1 |        3
  1 |        4
  2 |        1
  2 |        2
  2 |        3
  3 |        1
  3 |        2
  3 |        3
(9 rows)

आशा है कि यह मदद करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DatabaseError:टाइप कैरेक्टर के लिए बहुत लंबा मान (100)

  2. UTF-8 एन्कोडिंग के वर्ण 0xc286 का WIN1252 में कोई समकक्ष नहीं है .... iconv पोस्टग्रेज़ के साथ रूपांतरण पर क्रैश को पुनर्स्थापित करें

  3. PostgreSQL UNIX डोमेन सॉकेट बनाम TCP सॉकेट

  4. postgresql डुप्लीकेट कुंजी अद्वितीय बाधा का उल्लंघन करती है

  5. PostgreSQL के लिए सर्वश्रेष्ठ DBaaS समाधान