Saya punya tabel di PostgreSQL dengan 22 kolom, dan saya ingin menambahkan kunci primer kenaikan otomatis.
Saya mencoba membuat kolom bernama id
tipe BIGSERIAL tetapi pgadmin merespons dengan kesalahan:
ERROR: sequence must have same owner as table it is linked to.
Adakah yang tahu cara memperbaiki masalah ini? Bagaimana cara menambahkan kunci primer penambahan otomatis di PostgreSQL tanpa membuat ulang tabel lagi?
sql
postgresql
mkn
sumber
sumber
ALTER TABLE mytable ADD PRIMARY KEY (column);
. Postgresql akan memeriksa bahwa kolom tersebut tidak mengandung NULL.bigserial
danserial
memberikan kesalahan yang sama:ERROR: syntax error at or near "BIGSERIAL"
Menambahkan kunci primer otomatis di postgresql:
Langkah 1, buat tabel Anda:
Langkah 2, masukkan nilai ke dalam tabel Anda seperti ini, perhatikan bahwa mytable_key tidak ditentukan dalam daftar parameter pertama, ini menyebabkan urutan default menjadi autoincrement.
Langkah 3, pilih * dari tabel Anda:
Langkah 4, interpretasikan hasilnya:
Perhatikan bahwa kolom mytable_key telah ditambahkan secara otomatis.
ProTip:
Anda harus selalu menggunakan kunci utama di meja Anda karena postgresql secara internal menggunakan struktur tabel hash untuk meningkatkan kecepatan menyisipkan, menghapus, memperbarui dan memilih. Jika kolom kunci utama (yang dipaksa unik dan non-null) tersedia, itu bisa diandalkan untuk menyediakan seed unik untuk fungsi hash. Jika tidak ada kolom kunci utama yang tersedia, fungsi hash menjadi tidak efisien karena memilih beberapa set kolom lainnya sebagai kunci.
sumber
SERIAL
tidak membuat disequence
belakang layar: postgresql.org/docs/9.2/static/…thing_id int references epictable(mytable_key)
berfungsi?Buat kunci primer tambahan otomatis di postgresql, menggunakan urutan khusus:
Langkah 1, buat urutan Anda:
Langkah 2, buat tabel Anda
Langkah 3, masukkan ke tabel Anda
Langkah 4, amati baris
Dua baris memiliki kunci yang mulai dari 1 dan bertambah 1, seperti yang didefinisikan oleh urutan.
Bonus Elite ProTip:
Pemrogram benci mengetik, dan mengetik
nextval('splog_adfarm_seq')
itu mengganggu. Anda bisa mengetikkanDEFAULT
parameter itu, seperti ini:Agar hal di atas berfungsi, Anda harus menetapkan nilai default untuk kolom kunci pada tabel splog_adfarm. Yang lebih cantik.
sumber
Jika Anda ingin melakukan ini di pgadmin, itu jauh lebih mudah. Tampaknya dalam postgressql, untuk menambahkan kenaikan otomatis ke kolom, pertama-tama kita harus membuat urutan kenaikan otomatis dan menambahkannya ke kolom yang diperlukan. Saya memang suka ini.
1) Pertama, Anda perlu memastikan ada kunci utama untuk tabel Anda. Juga simpan tipe data kunci utama dalam bigint atau smallint. (Saya menggunakan bigint, tidak dapat menemukan datatype yang disebut serial sebagaimana disebutkan dalam jawaban lain di tempat lain)
2) Kemudian tambahkan urutan dengan mengklik kanan pada urutan-> tambahkan urutan baru . Jika tidak ada data di tabel, biarkan urutannya seperti itu, jangan buat perubahan apa pun. Simpan saja. Jika ada data yang ada, tambahkan nilai terakhir atau tertinggi di kolom kunci utama ke nilai Sekarang di tab Definisi seperti yang ditunjukkan di bawah ini.
3) Akhirnya, tambahkan baris
nextval('your_sequence_name'::regclass)
ke nilai Default di kunci utama Anda seperti yang ditunjukkan di bawah ini.Pastikan nama urutannya benar di sini. Ini semua dan peningkatan otomatis harus berfungsi.
sumber
Jika Anda ingin menggunakan angka dalam urutan, tentukan urutan baru dengan sesuatu seperti
dan kemudian ubah tabel untuk menggunakan urutan untuk id:
sumber
Saya telah mencoba skrip berikut untuk berhasil menambahkan secara otomatis kunci utama di PostgreSQL.
EDIT:
Kata kunci SERIAL secara otomatis membuat urutan untuk masing-masing kolom.
sumber
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
dan berfungsi.Mungkin saya sedikit terlambat untuk menjawab pertanyaan ini, tetapi saya sedang mengerjakan hal ini di pekerjaan saya :)
Saya ingin menulis kolom 'a_code' = c1, c2, c3, c4 ...
Pertama saya membuka kolom dengan nama
ref_id
dan tipeserial
. Lalu saya memecahkan masalah saya dengan perintah ini:sumber