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

Postgres Insert Into View Rule dengan Returning Clause

Anda jauh lebih baik menggunakan INSTEAD OF INSERT pemicu di sini:

CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
  id integer;
BEGIN
  INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
  INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
  RETURN NEW;
END; $$ LANGUAGE PLPGSQL;

CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
  FOR EACH ROW EXECUTE PROCEDURE MyFuncName();

Memeriksa nilai urutan saat ini untuk melihat apa yang disisipkan di tabel lain adalah buruk, buruk, buruk praktek. Bahkan saat Anda berada di sini dalam satu transaksi, jangan lakukan itu.

Anda bingung dengan masalah RETURNING informasi, karena saya juga bingung ketika membaca pertanyaan Anda. Di dalam suatu fungsi gunakan INTO klausa untuk mengisi variabel yang dideklarasikan secara lokal untuk menyimpan nilai rekaman yang kemudian dapat Anda gunakan dalam pernyataan berikutnya. Di luar fungsi, gunakan RETURNING klausa seperti yang Anda lakukan di cuplikan kode teratas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah SELECT atau INSERT dalam suatu fungsi rentan terhadap kondisi balapan?

  2. Bagaimana cara melindungi dari injeksi SQL ketika klausa WHERE dibangun secara dinamis dari formulir pencarian?

  3. PostgreSQL/JDBC dan TIMESTAMP vs. TIMESTAMPTZ

  4. Bagaimana pgBouncer membantu mempercepat Django

  5. psycopg2.ProgrammingError pada tipe Enum dalam migrasi database Flask (database)