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

Mengapa kode ini gagal di PostgreSQL dan bagaimana cara memperbaikinya (menyelesaikan masalah)? Apakah ini kelemahan mesin Postgres SQL?

... memberi tahu Anda bahwa spb_getWord() . Anda menghasilkan nilai yang sudah ada di SPB_WORD meja. Anda perlu memperbarui fungsi untuk memeriksa apakah kata sudah ada sebelum keluar dari fungsi - jika ya, buat ulang hingga menemukan kata yang tidak ada.

Saya pikir spb_runme() your Anda harus menyerupai:

create or replace function spb_runme() returns void as $$
DECLARE
  v_word VARCHAR(410);

begin
  perform setval('spb_wordnum_seq', 1, false);
  truncate table spb_word4obj, spb_word, spb_obj_word;

  for j in 0 .. 50000-1 loop

    if j % 100 = 0 then raise notice 'j = %', j; end if;

    for i in 0 .. 20 - 1 loop
      v_word := spb_getWord();
      INSERT INTO spb_word (word) VALUES (v_word);

      INSERT INTO spb_word4obj 
        (word, idx, doc_id, word_id)
        SELECT w.word, i, j, w.id
          FROM SPB_WORD w 
         WHERE w.word = v_word;

    end loop;

    INSERT INTO spb_obj_word (word_id, idx, doc_id) 
    SELECT w4o.word_id, w4o.idx, w4o.doc_id 
      FROM SPB_WORD4OBJ w4o 
     WHERE w40.doc_id = j;

  end loop;
end;

Menggunakan ini akan memungkinkan Anda untuk mengubah word_id untuk tidak mendukung NULL. Saat berhadapan dengan kunci asing, isi tabel dengan referensi kunci asing pertama - mulai dengan orang tua, lalu tangani anak-anaknya.

Perubahan lain yang saya buat adalah menyimpan spb_getWord() dalam sebuah variabel (v_word ), karena memanggil fungsi beberapa kali berarti Anda akan mendapatkan nilai yang berbeda setiap kali.

Hal terakhir - saya menghapus pernyataan hapus. Anda sudah memotong tabel, tidak ada yang perlu dihapus. Tentu saja tidak ada yang terkait dengan nilai j .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meminta array objek JSON di Postgres

  2. INITCAP() – Konversi ke Huruf Awal di PostgreSQL

  3. Bagaimana cara mengatur ulang urutan kunci utama postgres ketika tidak sinkron?

  4. Sintaks yang benar untuk array tipe komposit

  5. Postgres membuat kesalahan ekstensi POSTGIS dengan CentOS 6