Saya ingin kode dapat secara otomatis memperbarui cap waktu ketika baris baru dimasukkan seperti yang dapat saya lakukan di MySQL menggunakan CURRENT_TIMESTAMP.
Bagaimana saya bisa mencapai ini di PostgreSQL?
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp
)
database
postgresql
timestamp
Harun
sumber
sumber
timestamp
didefinisikan oleh spesifikasi SQL sebagai singkatan dariTIMESTAMP WITHOUT TIME ZONE
. Itu hampir pasti bukan yang Anda inginkan, seperti dijelaskan oleh pakar Postgres David E. Wheeler . Jenis yang lain,TIMESTAMP WITH TIME ZONE
mungkin yang Anda inginkan, menggunakan informasi offset zona waktu yang dilewati untuk menyesuaikan tanggal-waktu ke UTC (tetapi tidak benar-benar menyimpan info zona waktu tersebut terlepas dari nama jenisnya).Jawaban:
Untuk mengisi kolom selama menyisipkan, gunakan
DEFAULT
nilai:Perhatikan bahwa nilai untuk kolom itu dapat secara eksplisit ditimpa dengan memberikan nilai dalam
INSERT
pernyataan. Jika Anda ingin mencegahnya, Anda memang perlu pemicu .Anda juga perlu pemicu jika Anda perlu memperbarui kolom itu setiap kali baris diperbarui (sebagai disebutkan oleh EJ Brennan )
Perhatikan bahwa menggunakan kata yang dipesan untuk nama kolom biasanya bukan ide yang baik. Anda harus menemukan nama yang berbeda dari
timestamp
sumber
timestamp
menjaditimestamp_
. Bahkan yang lebih baik adalah nama yang lebih deskriptif sepertirow_created_
.Anda harus menulis pemicu yang disisipkan, dan kemungkinan pemicu pembaruan jika Anda ingin mengubahnya ketika catatan diubah. Artikel ini menjelaskannya dengan cukup baik:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
sumber
Memperbarui cap waktu, hanya jika nilainya berubah
Berdasarkan tautan EJ dan tambahkan pernyataan if dari tautan ini ( https://stackoverflow.com/a/3084254/1526023 )
sumber
Menggunakan 'now ()' sebagai nilai default secara otomatis menghasilkan cap waktu.
sumber