- Katılım
- 24 Şubat 2018
- Mesajlar
- 25,292
Postgresql kullanan bir envanter takip programı üzerinde çalışıyorum. Mutlak ihtiyaçtan ziyade amaç nodejs/expressjs öğrenmek. Sürekli veritabanı yapısını da değiştirdiğim için, bir SQL script ile düzenli olarak mevcut veritabanı yapısını tamamen temizleyip yeni yapıyı sıfırdan oluşturmak istedim. Beklentim, database'i sil, ilgili kullanıcıyı sil, kullanıcıyı tekrar oluştur, database'i tekrar oluştur. Ama iş malesef o kadar basit çıkmadı. İlave birkaç tane, bana saçma gelen adım var.
Veri tabanını oluşturuyorum, owner olarak da yeni oluşturduğum kullanıcı adını tanımlıyorum. Ama o kullanıcının veritabanına yeni tablo ekleme izni yok. Yapılması gereken, veritabanı içerisindeki "schema" için de yetkilendirme yapmak. Bu nasıl iştir yav ... Şuna benziyor: Adama evi satıyorsun, sonra da adamı yatak odasına sokmuyorsun "git balkonda uyu" diyorsun ...
Neyse, sıfırdan veri tabanı oluşturup bir kullanınıyı tam yetkilendirme yapan SQL prosedürü şöyle. Bu işlemlerin tamamının postgresql admin kullanıcısı (varsayılan isim postgres) yapması gerekiyor.
Veritabanını ve ilgili kullanıcıyı silip varsayılan duruma dönme prosedürü
Veri tabanını oluşturuyorum, owner olarak da yeni oluşturduğum kullanıcı adını tanımlıyorum. Ama o kullanıcının veritabanına yeni tablo ekleme izni yok. Yapılması gereken, veritabanı içerisindeki "schema" için de yetkilendirme yapmak. Bu nasıl iştir yav ... Şuna benziyor: Adama evi satıyorsun, sonra da adamı yatak odasına sokmuyorsun "git balkonda uyu" diyorsun ...
Neyse, sıfırdan veri tabanı oluşturup bir kullanınıyı tam yetkilendirme yapan SQL prosedürü şöyle. Bu işlemlerin tamamının postgresql admin kullanıcısı (varsayılan isim postgres) yapması gerekiyor.
SQL:
# kullanıcıyı oluştur
create role <user> login password '<password>';
# veritabanını oluştur
create database <db> owner <user>;
# oluşturulan veritabanını kullan
\c <db>
# zaten veritabanının sahibi olan kullanıcıya, veritabanının şeması için de
# erişim izni ver :()
alter schema public owner to <user>;
Veritabanını ve ilgili kullanıcıyı silip varsayılan duruma dönme prosedürü
SQL:
# silinecek veritabanından farklı bir veritabanına geç
\c postgres
# veritabanını sil
drop database <db>;
# kullanıcı ile ilişkili olan bütün yetkilendirmeleri sil
drop owned by <user>;
# kullanıcının kendisini sil
drop role <user>;