PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menghapus urutan yang tidak digunakan?

Pertama, urutan yang dibuat secara otomatis untuk kolom serial dihapus secara otomatis , ketika kolom (atau tabel di dalamnya) dihapus. Masalah yang Anda gambarkan seharusnya tidak ada sejak awal. Hanya sangat versi lama PostgreSQL tidak melakukan itu. 7.4 atau lebih tua?

Solusi untuk masalah:

Kueri ini akan menghasilkan perintah DDL untuk menghapus semua urutan "tidak terikat" dalam database dieksekusi di:

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;

Cast ke regclass di c.oid::regclass secara otomatis memenuhi syarat skema nama urutan jika diperlukan sesuai dengan search_path saat ini . Lihat:

Hasil:

DROP SEQUENCE foo_id_seq;
DROP SEQUENCE bar_id_seq;
...

Jalankan hasilnya untuk menjatuhkan semua urutan yang tidak terikat ke kolom serial (atau kolom lainnya). Pelajari arti kolom dan tabel di sini .

Hati-hati meskipun! Itu tidak berarti urutan tersebut tidak digunakan sebaliknya. Ada sejumlah kasus penggunaan di mana urutan dibuat sebagai objek yang berdiri sendiri. Misalnya jika Anda ingin beberapa kolom berbagi satu urutan. Anda harus tahu persis apa yang Anda lakukan.

Namun, Anda tidak bisa hapus urutan yang terikat ke serial kolom dengan cara ini. Jadi operasinya aman di ini hormat.

DROP SEQUENCE test_id_seq

Hasil:

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. NodeJS/Knex Membuat Respons Json

  2. Migrasi ActiveRecord tidak mengisi tampilan terwujud Postgres

  3. Manajemen &Pemantauan Basis Data untuk PostgreSQL 12

  4. PostgreSQL tersemat untuk pengujian Java JUnit

  5. PostgreSQL JDBC Null String diambil sebagai byte