Database, postgreSQL
- July 14, 2008
Sequence di postgreSQL
Mungkin akan mendapat kurang perhatian oleh kita untuk masalah yang satu ini, SEQUENCE (kalau menurut saya seh mungkin lebih mirip dengan auto_increament di MySQL), karena hal ini hanya kita temukan ketika kita akan membuat table di postgreSQL dan setelah itu mungkin kita jarang berhubungan dengannya. Oleh sebab itu ketika ada suatu kesalahan, maka tidak ada salahnya untuk memeriksa SEQUENCE ini.
Contoh kasus seperti ini, misalnya, ketika program dan database jadi dan sudah jalan dalam beberapa waktu, tiba-tiba terdapt kesalahan baru pada saat memasukkan data, apapun itu pasti tidak akan terlihat dimana kesalahannya jika kita tidak menampilkannya. Dengan demikian kita dapat menelusurinya dari program yang mengalami kesalahan tersebut dengan memberikan parameter bantuan atau dengan memeriksa databasenya dengan memasukkan (insert) secara manual, dan ternyata tidak bisa juga.
Sekarang permasalahannya adalah bagaimana menemukan kesalahan tersebut.
Pemeriksaan kesalahan ini mungkin alternatif pemeriksaan kesalahan yang lainnya. Misalnya kita mempunyai tabel dengan nama buku dengan primary key idbuku dan menjadikannya SEQUENCE, Maka dapat kita periksa seperti berikut:
-
\d buku
-
Table "buku"
-
Column | Type | Modifiers
-
————————-+—————————+———————————————————————————————————————————————————
-
idbuku | integer | not null default nextval(‘buku_idbuku_seq’::text)
-
judul | text |
-
Primary key: buku_pkey
-
-
\ds buku
-
List of relations
-
Name | Type | Owner
-
————————————————-+—————————-+——————————————–
-
buku_idbuku_seg | sequence | artharry
-
(1 row)
Dari sini dapat diperhatikan bahwa sequence harus sama antara yang terdapat di tabel buku maupun yang terdapat pada sequence. Jika tidak sama, maka dapat merubah atau rename nama sequence atau menghapusnya dan memasukkan dengan nama sequence yang baru dan sama dengan nama sequence di tabel buku.
-
DROP SEQUENCE buku_idbuku_seg;
-
DROP
-
CREATE SEQUENCE buku_idbuku_seq;
-
CREATE
-
REVOKE ALL ON TABLE buku_idbuku_seq FROM PUBLIC;
-
REVOKE
-
GRANT ALL ON TABLE buku_idbuku_seq TO PUBLIC;
-
GRANT
Setelah itu cobalah untuk memasukkan (insert) data secara manual.
* image from: postgresql.org

4 Responses to “Sequence di postgreSQL”
bagaimana menciptakan sequence yg mulainya bukan dari 1, misal dari 70?
terima kasih
By ferry on Jul 28, 2008
Belum pernah nyoba,
mungkin bisa pake
SELECT setval('buku_idbuku_seq', 70);By artharry on Jul 28, 2008
tmn2 aku salah menginsert tabel. kemudian menghapus 1 row nomor40 yang salah pada tabel itu.tetapi ketika di insert kembali dengan sequence nomornya malah menjadi 41, padahal nomor40 sudah dihapus. bagaimana caranya agar seq ikut terhapus pada saat kita mendelete tabel tersebut. thks
By rara on Nov 21, 2008
Kayaknya ga bisa deh kalo menghapus seq. Seperti halnya autoincrement di beberapa database yang lain juga tidak dapat menghapusnya. Penggunaan seq ini menurut saya dimaksutkan untuk memudahkan kita membuat primary key secara berurtan, namun dengan beberapa fitur yang tidak sesuai dengan keinginan kita. Misal kita gunakan sekaligus sebagai penomoran, maka ketika dihapus tidak lagi urut sesuai dengan yang kita inginkan, dalam hal ini mungkin penggunaannya tidak bisa langsung untuk keperluan seq maupun untuk penomoran. Belum lagi ketika jumlah data yang sangat banyak akan menyebabkan daya tampung dari seq tersebut melebihi dari kapasitas sehingga overload, dan mungkin masih ada lagi permasalahan yang lainnya. Jadi, perlu adanya pertimbangan sebelum menggunakan seq ini.
By artharry on Nov 25, 2008