Mevcut bir tablonun yapısını değiştirmek için kullanılır.
ALTER TABLE tablo_adi action;
-Sütun ekleme
-Sütun silme
-Bir sütunun veri türünü (data type) değiştirme
-Bir sütunu yeniden adlandırma
-Sütun için varsayılan bir değer (default value) belirleme
-Bir sütuna bir kısıtlama (constrait) ekleme
-Bir tabloyu yeniden adlandırma
Sütun eklemek için ALTER TABLE ADD COLUMN ifadesi kullanılır.
ALTER TABLE tablo_adı ADD COLUMN kolon_adı datatype kolon_kısıtı;
Sütun silmek için ALTER TABLE DROP COLUMN ifadesi kullanılır.ALTER TABLE tablo_adı DROP COLUMN kolon_adı;
Bir sütunu yeniden adlandırmak için ALTER TABLE RENAME COLUMN TO ifadesi
kullanılır.
ALTER TABLE tablo_adı RENAME COLUMN kolon_adı TO yeni_kolon_adı;
Sütunun varsayılan değerini (default value) değiştirmek için ALTER TABLE ALTER
COLUMN SET DEFAULT veya DROP DEFAULT öğesi kullanılır.
ALTER TABLE tablo_adı ALTER COLUMN kolon_adı [SET DEFAULT
value | DROP DEFAULT];
NOT NULL kısıtlamasını değiştirmek için ALTER TABLE ALTER COLUMN ifadesi
kullanılır.
ALTER TABLE tablo_adı ALTER COLUMN kolon_adı[SET NOT NULL| DROP
NOT NULL];
CHECK kısıtlaması eklemek için ALTER TABLE ADD CHECK deyimi kullanılır.
ALTER TABLE tablo_adı ADD CHECK expression;
Genel olarak, bir tabloya kısıtlama eklemek için ALTER TABLE ADD CONSTRAINT
ifadesi kullanılır.
ALTER TABLE tablo_adı ADD CONSTRAINT kısıt_adı kısıt_tanımı;
Bir tabloyu yeniden adlandırmak için ALTER TABLE RENAME TO ifadesi kullanılır.
ALTER TABLE tablo_adı RENAME TO yeni_tablo_adı ;
Örnekler :
CREATE TABLE links (
link_id serial PRIMARY KEY,
title VARCHAR (518) NOT NULL,
url VARCHAR (1034) NOT NULL ) ;
Aktif adında yeni bir sütun eklemek için aşağıdaki ifade kullanılır.ALTER TABLE links ADD COLUMN aktif boolean;
Aşağıdaki ifade, aktif sütununu link tablosundan kaldırır.
ALTER TABLE links DROP COLUMN aktif;
title adlı sütunun adını link_title olarak değiştirmek için aşağıdaki ifade
kullanılır.ALTER TABLE links RENAME COLUMN title TO link_title;
Aşağıdaki ifade, links tablosuna target adında yeni bir sütun ekler.ALTER TABLE links ADD COLUMN target VARCHAR(10);
links tablosunda target sütunu için default değer olarak _blank ayarlamak için
aşağıdaki ifadeyi kullanılır.ALTER TABLE links ALTER COLUMN target SET DEFAULT ‘_blank’;
Yeni satırı, target sütunu için bir değer belirtmeden links tablosuna eklerseniz, target
sütunu, _blank değerini varsayılan değer olarak alır.INSERT INTO links (link_title, url)
VALUES(‘PostgreSQL Egitimi’,’https://www.postgresqlegitimi.com/’);

target sütunun kabul edeceği değerleri blank, parent, ve invalid ile kısıtlar.
ALTER TABLE links ADD CHECK (target IN (‘blank’, ‘parent’,‘invalid’));
target sütunu için ayarlanan CHECK kısıtlamasını ihlal eden satır eklemeye
çalışıldığında, aşağıdaki gibi bir hata verir.
INSERT INTO links (link_title, url, target) VALUES(‘PostgreSQL Egitimi’,’https://www.postgresqlegitimleri.com/’, ‘db’);

links tablosunun url sütununa UNIQUE kısıtlaması ekler.
ALTER TABLE links ADD CONSTRAINT unique_url UNIQUE ( url );
Aşağıdaki ifade, zaten var olan url’yi eklemeye çalıştığı için hata döner.
INSERT INTO links(link_title,url) VALUES(‘PostgreSQL’,’https://www.postgresqlegitimleri.com/’);

rename table (tablo adı değiştirme)
Mevcut bir tabloyu yeniden adlandırmak için ALTER TABLE ifadesi aşağıdaki gibi
kullanılır.
ALTER TABLE tablo_adi RENAME TO yeni_tablo_adi; ALTER TABLE IF EXISTS tablo_adi RENAME TO yeni_tablo_adi;
ÖRNEKLER
CREATE TABLE sellers ( id serial PRIMARY KEY, name VARCHAR NOT NULL ) ;
sellers tablosunu suppliers olarak yeniden adlandırmak için aşağıdaki
ALTER TABLE RENAME TO ifadesini kullanılır.
ALTER TABLE sellers RENAME TO suppliers;
Suppliers tablosuyla ilişkili tablo oluşturalım.
CREATE TABLE supplier_groups (id serial PRIMARY KEY, name VARCHAR NOT NULL);
suppliers tablosuna group_id adlı yeni bir sütun ekleyelim. Bu sütun,
suppliers_group tablosunun id sütununa bağlanan foreign key sütunudur.
ALTER TABLE suppliers ADD COLUMN group_id INT NOT NULL; ALTER TABLE suppliers ADD FOREIGN KEY (group_id) REFERENCES supplier_groups(id);
Suppliers tablosunu aşağıdaki gibi tanımlayarak suppliers tablosundaki foreign key
kısıtlamasını doğrulayabiliriz.
ALTER TABLE supplier_groups RENAME TO groups;

drop table (tablo silme)
DROP TABLE [IF EXISTS] tablo_adı [CASCADE | RESTRICT];
Drop etmek istenilen tablo, views, triggers, functions, ve stored procedures gibi diğer
nesnelerde kullanılıyorsa, DROP TABLE ifadesi tabloyu silemez, hata alır. Bu durumda iki
seçenek vardır:
1-CASCADE seçeneği, tabloyu ve ona bağlı nesneleri kaldırmanıza olanak tanır.
2-RESTRICT seçeneği, tabloya bağlı herhangi bir nesne varsa tabloyu reddeder. DROP
TABLE deyiminde açıkça belirtmezseniz, RESTRICT seçeneği varsayılandır.
Birden çok tabloyu aynı anda silmek için;
DROP TABLE [IF EXISTS] tablo_adı1, tablo_adı2, ... [CASCADE | RESTRICT];
NOT: Tabloları drop etmek için superuser, schema, owner veya table owner rollerine
sahip olmak gerekmektedir.
Örnekler :
CREATE TABLE book_author ( authors_id INT PRIMARY KEY, name VARCHAR (50));
CREATE TABLE book_pages ( pages_id serial PRIMARY KEY, title VARCHAR (255) NOT NULL, authors_id INT NOT NULL, FOREIGN KEY (authors_id)REFERENCES book_author (authors_ id) );
book_author tablosunu silmek için ;
DROP TABLE IF EXISTS book_author;

DROP TABLE ifadesi, drop edilen tablonun bağımlı nesnelerini kaldırırsa, aşağıdaki
gibi bir mesaj yayınlar.
DROP TABLE book_author CASCADE;

truncate table (tablodaki tüm verileri siler)
Tablo içerisindeki tüm veriyi çok hızlı siler. Transaction log yani WAL üretmez. Geri
dönüşü yoktur. where filtresi kullanılamaz.
TRUNCATE TABLE tablo_adi ;
Büyük bir tablo silinecekse (drop), önce içerisindeki veri truncate edilip sonra tablo
drop edilirse hem sistemi yormaz hem de daha hızlı olur.
Birden fazla tablodan tüm verileri silmek için ;TRUNCATE TABLE tablo_adi1, tablo_adi2, …;
Bir tablodan ve tabloya foreign key referansı olan diğer tablolardan veri silmek için
TRUNCATE TABLE ifadesinde CASCADE seçeneği kullanılır.
TRUNCATE TABLE tablo_adi CASCADE;