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

KESALAHAN:fungsi dalam ekspresi indeks harus ditandai IMMUTABLE di Postgres

Menurut utas ini di milis peretas:

http://www.mail-archive.com/[email protected]/msg86725.html

ini adalah perilaku yang dimaksudkan sebagai to_char tergantung pada pengaturan LC_MESSAGES

Dalam kasus Anda, ini tampaknya tidak masuk akal karena format yang Anda gunakan tidak akan pernah bergantung pada lokal, jadi jika Anda memang perlu menggunakan representasi teks dalam indeks, Anda dapat membuat fungsi to_char() Anda sendiri dan menandainya sebagai tidak berubah:

CREATE OR REPLACE FUNCTION my_to_char(some_time timestamp) 
  RETURNS text
AS
$BODY$
    select to_char($1, 'yyyy-mm-dd');
$BODY$
LANGUAGE sql
IMMUTABLE;

Jika Anda harus menggunakannya sebagai teks dalam indeks (dan tidak dapat menggunakan pemeran sampai tanggal seperti yang disarankan Sam), Anda perlu membuat fungsi pemformatan sendiri yang dapat Anda tandai sebagai tidak dapat diubah. Itu kemudian dapat digunakan dalam indeks.

Tetapi untuk membuat Postgres menggunakan indeks yang perlu Anda panggil my_to_char() dalam pernyataan SQL Anda juga. Itu tidak akan mengenalinya saat Anda menggunakan to_char() . bawaan

Tapi saya pikir saran Sam menggunakan tanggal langsung dalam indeks mungkin lebih baik



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

  2. Cara Mengubah Kata Sandi Pengguna di PostgreSQL

  3. Setara dengan HEX() dan UNHEX() MySQL di Postgres?

  4. Mengapa iterasi melalui Django QuerySet besar menghabiskan banyak memori?

  5. Menggunakan beberapa skema PostgreSQL dengan model Rails