Postgresql Veri Tabanı Objeleri – I

Sample Veri Tabanı’nın Yüklenmesi

Dvdrental adlı sample database’i yüklemek için dosyalar https://sp.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip adresinden indirilir ve daha sonra dvdrental adında bir veri tabanı aşağıdaki komut ile oluşturulur. Ve pgadmin üzerinden veri tabanı restore edilir.

Daha sonra restore işlemi için dvdrental veri tabanı üzerine sağ tıklanır ve restore seçeneği ile devam edilerek veri tabanının yedek dosyalarından restore edilmesi işlemi yapılır.

Postgresql Veri Tabanında Tablo ve Constraintler

Postgresql veri tabanında tablo yaratmak için kullanılan komut aşağıdaki gibidir;

CREATE TABLE table_name (column_name TYPE column_constraint, table_constraint table_constraint) INHERITS existing_table_name;

Constraintler veri tutarlılığı için kullanılır.  Tabloda tanımlandığı alan üzerinde türüne göre kural ve veri ilişkisi kurarak veri bütünlüğü ve tutarlılığını sağlarlar.

NOT NULL : Kolonun null değer içermemesi için kullanılır.

UNIQUE : Kolondaki verilerin tekrarsız olmasının istendiği durumlarda bu constraint kullanılır ve verinin tekrar etmesinin önüne geçer.

PRIMARY KEY : NOT NULL ve UNIQUE constraintlerin birleşimidir.

CHECK : Girilen verinin belirli bir formata veya şarta uygun olup olmadığını kontrol eden constrainttir.

REFERENCES : Primary key foreign key ilişkisini sağlayan constrainttir.

Örnek : Kullanicilar ve kategoriler tablosu oluşturulur. Daha sonra kullanici_kategori tablosu oluşturularak bu tablolar arasında Primary Key – Foreign Key ilişkisi kurulur.

CREATE TABLE kullanicilar(

              kullanici_id serial PRIMARY KEY,

              kullaniciadi VARCHAR (50) UNIQUE NOT NULL,

              password VARCHAR (50) NOT NULL,

              email VARCHAR (355) UNIQUE NOT NULL,

              uyelik_tarihi TIMESTAMP NOT NULL,

              son_giris TIMESTAMP

);

CREATE TABLE kategoriler(

              kategori_id serial PRIMARY KEY,

              kategori_adi VARCHAR (255) UNIQUE NOT NULL

);

CREATE TABLE kullanici_kategori

(

  kullanici_id integer NOT NULL,

  kategori_id integer NOT NULL,

  yetkilendirme_tarihi timestamp without time zone,

  PRIMARY KEY ( kullanici_id, kategori_id),

  CONSTRAINT kullanici_kategori_id_fkey FOREIGN KEY (kategori_id)

      REFERENCES kategoriler(kategori_id) MATCH SIMPLE

      ON UPDATE NO ACTION ON DELETE NO ACTION,

  CONSTRAINT kullanici_kategori_kullanici_id_fkey FOREIGN KEY (kullanici_id)

      REFERENCES kullanicilar(kullanici_id) MATCH SIMPLE

      ON UPDATE NO ACTION ON DELETE NO ACTION

);

ALTER TABLE İşlemleri

Tablo üzerinde alter işlemleri ALTER TABLE … ; komutu ile gerçekleştirilir.

Tabloya yeni bir kolon eklemek için aşağıdaki komut kullanılır.

ALTER TABLE table_name ADD COLUMN new_column_name TYPE;

Tablodan bir kolon silmek icin aşağıdaki komut kullanılır.

ALTER TABLE table_name DROP COLUMN column_name;

Tabloda bir kolonu yeniden isimlendirmek için aşağıdaki komut kullanılır.

ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;

Bir kolon üzerine constraint eklemek için aşağıdaki komut kullanılır.

ALTER TABLE table_name ALTER COLUMN column_name [SET NOT NULL| DROP NOT NULL];

Tabloyu yeniden isimlendirmek için aşağıdaki komut kullanılır.

ALTER TABLE table_name RENAME TO new_table_name;

SELECT INTO KOMUTU

Postgresql veri tabanında select into komutu kullanılarak bir sorgudan dönen değerler tabloya insert edilerek tablo oluşturulabilir. Select into komut yapısı şu şekildedir.

SELECT  column_list

INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table_name

FROM    table_name WHERE condition;

Örnek ;

SELECT film_id, title, rental_rate INTO TABLE film_r FROM film WHERE rating = ‘R’ AND rental_duration = 5 ORDER BY title;

CREATE TABLE AS KOMUTU

Bir sorgudan gelen sonuçları bir tabloya insert ederek tablo oluşturmayı sağlar.

CREATE TABLE IF NOT EXISTS film_rating (rating, film_count) AS SELECT rating, COUNT (film_id) FROM film GROUP BY rating;

SERIAL TIPI

Tabloda primary key kullanırken çoğu zaman oto incremental bir değer tipine ihtiyaç duyulur. SERIAL tipi bu ihtiyacı karşılar. Arka tarafında yapılan iş ise bir sequence oluşturulmasıdır.

  • Önce sequence yaratılır ve next value değeri set edilir.
  • Daha sonra id colonuna bir NOT NULL constraint eklenir.

CREATE TABLE table_name(     id SERIAL );

CREATE SEQUENCE table_name_id_seq;

CREATE TABLE table_name (     id integer NOT NULL DEFAULT nextval(‘table_name_id_seq’) );

 ALTER SEQUENCE table_name_id_seq OWNED BY table_name.id;

ORNEK

CREATE TABLE books( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL );

INSERT INTO books(name) VALUES(‘Postgresql Admin Bookss’);

INSERT INTO books(id,name) VALUES(DEFAULT,’Postgresql Dev Books’);

SELECT * FROM books;

pg_get_serial_sequence(‘table_name’,’column_name’)

SELECT currval(pg_get_serial_sequence(‘books’, ‘id’));

IDENTITY Tipi

Postgresql 10 versiyonuyla GENERATED AS IDENTITY constraint kullanılmaya başlanmıştır. Bu constraint bir kolona otomatik olarak unique değer eklemeyi sağlar.

column_name type GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY[ ( sequence_option ) ]

ALWAYS : dışarıdan kolona değer girilmesine izin vermez. İnsert sonucu hata alınır.

BY DEFAULT : dışardan değer girilmek istenir ise kullanılan keyword’dür.

CREATE TABLE color ( color_id INT GENERATED ALWAYS AS IDENTITY, color_name VARCHAR NOT NULL );

INSERT INTO color (color_name) VALUES (‘Red’);

CREATE TABLE color ( color_id INT GENERATED BY DEFAULT AS IDENTITY (START WITH 10 INCREMENT BY 10), color_name VARCHAR NOT NULL );

INSERT INTO color (color_name) VALUES (‘Orange’);

Var olan bir tabloya IDENTITY kolonu eklemek icin kullanılacak komut;

CREATE TABLE shape ( shape_id INT, shape_name VARCHAR NOT NULL );

ALTER TABLE shape ALTER COLUMN shape_id ADD GENERATED ALWAYS AS IDENTITY;

ALTER TABLE shape ALTER COLUMN shape_id DROP IDENTITY IF EXISTS;

Veysel YUKSEL
Latest posts by Veysel YUKSEL (see all)

Veysel YUKSEL

RDBMS ve NoSQL veri tabanı yönetimi ve Big Data teknolojileri.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir