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

Menambahkan kolom sebagai kunci asing memberikan kolom KESALAHAN yang direferensikan dalam batasan kunci asing tidak ada

Untuk menambahkan kendala ke kolom Harus ada terlebih dahulu ke dalam tabel tidak ada perintah di Postgresql yang dapat Anda gunakan yang akan menambahkan kolom dan menambahkan kendala pada saat yang sama. Itu harus dua perintah yang terpisah. Anda dapat melakukannya dengan menggunakan perintah berikut:

Pertama lakukan sebagai:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Saya menggunakan integer sebagai ketik di sini tetapi harus sama dengan jenis id kolom auth_user tabel.

Kemudian Anda menambahkan batasan

ALTER TABLE links_chatpicmessage 
   ADD CONSTRAINT fk_someName
   FOREIGN KEY (sender) 
   REFERENCES auth_user(column_referenced_name);

ADD CONSTRAINT fk_someName bagian dari perintah ini adalah menamai kendala Anda jadi jika Anda nanti perlu mendokumentasikannya dengan beberapa alat yang membuat model Anda, Anda akan memiliki kendala bernama alih-alih nama acak.

Juga berfungsi untuk tujuan administrator sehingga DBA tahu bahwa kendala berasal dari tabel itu.

Biasanya kami menamakannya dengan beberapa petunjuk tentang dari mana asalnya ke mana referensi pada kasus Anda adalah fk_links_chatpicmessage_auth_user jadi siapa pun yang melihat nama ini akan tahu persis batasan ini tanpa melakukan kueri rumit di INFORMATION_SCHEMA untuk mengetahuinya.

EDIT

Seperti yang disebutkan oleh jawaban @ btubbs, Anda sebenarnya dapat menambahkan kolom dengan batasan dalam satu perintah. Seperti ini:

alter table links_chatpicmessage 
      add column sender integer, 
      add constraint fk_test 
      foreign key (sender) 
      references auth_user (id);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa apakah tipe yang ditentukan pengguna sudah ada di PostgreSQL

  2. PostgreSQL:Peringatan:Halaman kode konsol (437) berbeda dari halaman kode Windows (1252)

  3. SequelizeConnectionError:sertifikat yang ditandatangani sendiri

  4. psycopg2.OperationalError:FATAL:protokol frontend tidak didukung 1234.5679:server mendukung 2.0 hingga 3.0

  5. SQL Transpose Baris sebagai Kolom