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

Bagaimana cara mengubah REFERENSI di PostgreSQL?

Dependensi internal antara tabel dan/atau objek lain tidak pernah terikat pada nama objek. Secara internal, setiap objek disimpan dalam tabel katalog dan OID (kunci utama internal) objek digunakan untuk semuanya lain.

Oleh karena itu, FOREIGN KEY referensi disimpan dalam tabel katalog pg_constraint (batasan itu sendiri termasuk namanya) dan pg_depend . Mengubah nama tabel tidak akan merusak fungsionalitas sama sekali .

nama dari kendala tetap tidak berubah. Anda dapat mengabaikannya, atau Anda mungkin ingin mengganti nama batasan agar tidak menyesatkan.

Namun, karena Anda tidak menentukan nama batasan pada waktu pembuatan, sistem memilih default, yaitu example2_example1fk_fkey dalam kasus Anda kecuali nama itu diambil. Tidak ada referensi ke tabel yang dirujuk nama. Tapi nama kolom kemungkinan harus berubah dalam contoh Anda juga. Dan itu digunakan dalam nama batasan.

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

Di Postgres 9.2 atau lebih baru, Anda juga dapat mengganti nama kendala (sebagai dequis berkomentar ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

Di versi yang lebih lama, Anda harus menghapus dan membuat ulang batasan untuk mengganti namanya, paling baik dalam satu pernyataan:

ALTER TABLE example2  -- rename constraint
   DROP CONSTRAINT example2_example1fk_fkey
 , ADD  CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
      REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Rincian dalam manual.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penggabungan batin dengan SqlAlchemy

  2. Apakah ada yang setara dengan Postgresql SETIAP fungsi agregat pada RDBMS lain?

  3. PostgreSQL, Agregat khusus

  4. Apa yang setara dengan encode(<columnName>, 'escape') PostgreSQL di java?

  5. Mengapa PostgreSQL memperlakukan kueri saya secara berbeda dalam suatu fungsi?