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

Apakah ada cara untuk menggunakan tipe data postgresql 9.3 sehingga hanya dapat memengaruhi satu sisi?

Ada tiga jenis pemeran. Pemeran terdaftar untuk sumber Anda, jenis target harus "tugas" (a ) atau "implisit" (i ) untuk bekerja di VALUES ekspresi INSERT penyataan. Melihat katalog sistem pg_cast , pemeran dari boolean ke integer hanya didefinisikan "eksplisit" (e ) :

SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM   pg_cast
WHERE  castsource = 'bool'::regtype
AND    casttarget = 'int'::regtype;

Hasil:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Terkait:

Anda harus mengubah castcontext untuk membuatnya bekerja - yang Anda bisa lakukan sebagai pengguna super. Tidak ada pernyataan "ALTER CAST" untuk manuver eksotis ini, Anda harus UPDATE secara langsung. Seperti:

UPDATE pg_cast
SET    castcontext = 'a'
WHERE  castsource = 'bool'::regtype
AND    casttarget = 'int'::regtype;

Namun , ada alasan bagus untuk konteks pemeran yang telah ditentukan sebelumnya untuk setiap pemeran. Merusak katalog sistem bukanlah sesuatu yang harus Anda lakukan dengan mudah. Dalam kasus khusus ini mungkin membuat pengambilan keputusan tidak seimbang ketika Postgres harus memilih pemain yang cocok. Seperti untuk memilih dari serangkaian fungsi yang kelebihan beban ...

Prosedur serupa untuk integer -> boolean , int2 -> boolean , boolean -> int2 , dll.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL INSERT ON CONFLICT UPDATE (upsert) gunakan semua nilai yang dikecualikan

  2. Haruskah saya menghapus bidang id default saat menggunakan kunci utama string di Rails/Postgres?

  3. Hitung DATEDIFF di POSTGRES menggunakan SQLAlchemy

  4. Pandas - write_frame ke sqlite - datetime64[ns]

  5. Bagaimana cara menanyakan array jsonb dengan operator IN