PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изтрия неизползваните последователности?

Първо, последователност, която се създава автоматично за серийна колона, се изтрива автоматично , когато колоната (или таблицата, в която се намира) е изтрита. Проблемът, който описвате, не би трябвало да съществува като начало. Само много старите версии на PostgreSQL не правеха това. 7.4 или по-стара?

Решение на проблема:

Тази заявка ще генерира DDL команди за изтриване на всички „необвързани“ последователности в базата данни се изпълнява в:

SELECT string_agg('DROP SEQUENCE ' || c.oid::regclass, '; ') || ';' AS ddl
FROM   pg_class       c
LEFT   JOIN pg_depend d ON d.refobjid = c.oid
                       AND d.deptype <> 'i'
WHERE  c.relkind = 'S'
AND    d.refobjid IS NULL;

Прехвърлянето към regclass в c.oid::regclass автоматично квалифицира схематично имена на последователности, където е необходимо, според текущия search_path . Вижте:

Резултат:

DROP SEQUENCE foo_id_seq;
DROP SEQUENCE bar_id_seq;
...

Изпълнете резултата, за да премахнете всички последователности, които не са обвързани със серийна колона (или друга колона). Проучете значението на колоните и таблиците тук .

Внимателно все пак! Тонака означава, че тези последователности не се използват иначе. Има редица случаи на употреба, при които последователностите се създават като самостоятелни обекти. Например, ако искате няколко колони да споделят една последователност. Трябва да знаете точно какво правите.

Вие обаче не можете изтриване на последователности, обвързани с serial колона по този начин. Така че операцията е безопасна в това уважение.

DROP SEQUENCE test_id_seq

Резултат:

ERROR:  cannot drop sequence test_id_seq because other objects depend on it
DETAIL:  default for table test column id depends on sequence test_id_seq
HINT:  Use DROP ... CASCADE to drop the dependent objects too.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да укажа „поръчка по“ на двусмислена колона с помощта на пролетна партида и postgres?

  2. Промяна на всички нули (ако има такива) във всички колони (в таблица) на... да речем 1

  3. Пълнотекстово търсене в Postgres:как да търсите няколко думи в множество полета?

  4. Rails бази данни, защо да използвате една и съща СУБД за разработка и производство?

  5. CTE и парадоксът за рождения ден