Postgresql DDL, DML, DCL, TCL Kavramları

24 May

Veri tabanı yönetim sistemlerinde, veriyi tanımlama, işleme, kontrol etme ve veri tabanına işlem yapma gibi aktiviteler için diller tanımlanmıştır.

  • DDL-Data Definition Language
  • DML-Data Manipulation Language
  • DCL-Data Control Language
  • TCL-Transactional Control Language

DDL – Data Definition Language

DDL bildirim yapan bir yapıya sahiptir ve table, view, index, namespace, tablespace, database, function, trigger ve user gibi veritabanı nesnelerini oluşturmamıza, değiştirmemize ve kaldırmamıza imkan tanır. Başlıca DDL işlemleri:

  • CREATE
  • DROP
  • RENAME
  • ALTER
  • TRUNCATE

DML – Data Manipulation Language

DML ifadeleri, veritabanındaki verilerle işlem yapmaya yarar.

  • SELECT
  • UPDATE
  • INSERT
  • DELETE

DCL – DATA CONTROL LANGUAGE

Kullanıcı yetki ve izinleri üzerinde işlem yapmaya yarar.

  • GRANT
  • REVOKE

TCL – TRANSACTIONAL CONTROL LANGUAGE

Yapılan işlemlerin kontrolünü sağlamaya yarar.

  • COMMIT
  • ROLLBACK
  • SAVEPOINT

PostgreSQL GRANT, REVOKE

23 May

Bir önceki yazıda PostgreSQL kullanıcı işlemlerinin nasıl yapıldığından bahsetmiştik. Bu yazıda ise PostgreSQL kullanıcısının, erişim izinlerini düzenleyen DCL (Data Control Language) ifadelerden bahsedilmektedir. PostgreSQL DCL ifadeleri şu şekildedir:

  • GRANT
  • REVOKE

Aşağıdaki örneklerde bir kullanıcı (username) için yetki verme ve alma işlemi yapılsa da, username yerine bir grup adı da kullanılabilir. Bu şekilde, kullanıcı grubuna dahil olan bütün kullanıcılar yetkilendirilmiş olur.

Bir kullanıcının yetki işlemlerini yapabilmesi için öncelikle superuser yetkilerine sahip olması gerekmektedir.

Superuser Durum Değişimi

Kullanıcıyı superuser durumuna getir.

ALTER USER myuser WITH SUPERUSER;

Kullanıcının superuser durumunu kaldır.

ALTER USER username WITH NOSUPERUSER;

Veritabanı Yetkileri

Kullanıcıya, veritabanı oluşturma yetkisi ver.

ALTER USER username CREATEDB;

Kullanıcıya, veri tabanına bağlanma yetkisi ver.

GRANT CONNECT ON DATABASE database_name TO username;

Kullanıcıdan veritabanı bağlanma yetkisini geri al.

REVOKE CONNECT ON DATABASE database_name FROM username;

Kullanıcıya, veritabanındaki tüm ayrıcalıkları ver.

GRANT ALL PRIVILEGES ON DATABASE database_name TO username;

Kullanıcıdan, veritabanındaki tüm ayrıcalıkları geri al.

REVOKE ALL PRIVILEGES ON DATABASE database_name FROM username;

Schema ve Object Yetkileri

Kullanıcılar, şema içerisinde bulunan table, column, sequence gibi nesneler üzerinde yetkilendirilebilirler.

Kullanıcıya şema kullanım yetkisi ver.

GRANT USAGE ON SCHEMA schema_name TO username;

Kullanıcıdan şema kullanım yetkisini geri al.

REVOKE USAGE ON SCHEMA schema_name FROM username;

Kullanıcının, bir tablo üzerinde SELECT, INSERT, UPDATE, DELETE gibi DML(Data Manipulation) ifadelerini kullanım yetkilerini vermek mümkündür.

Kullanıcıya şemadaki bütün tablolar için yetki ver.

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES 
IN SCHEMA schema_name TO username;

Kullanıcının şemadaki bütün tablolarda bulunan yetkilerini geri al.

REVOKE SELECT, INSERT, UPDATE, DELETE ON ALL TABLES 
IN SCHEMA schema_name FROM username;

Kullanıcıya tek bir tabloya için yetki ver.

GRANT SELECT, INSERT, UPDATE, DELETE ON table_name 
IN SCHEMA schema_name TO username;

Bir şemeda bulunan bütün tablolar için, kullanıcıya bütün yetkileri ver.

GRANT ALL PRIVILEGES ON ALL TABLES 
IN SCHEMA schema_name TO username;

Bir şemeda bulunan bütün tablolara ait bütün yetkileri kullanıcıdan geri al.

REVOKE ALL PRIVILEGES ON ALL TABLES 
IN SCHEMA schema_name FROM username;

Bir şemeda bulunan bütün dizeler(sequence) için, bütün yetkileri ver.

GRANT ALL PRIVILEGES ON ALL SEQUENCES 
IN SCHEMA schema_name TO username;

Bir şemeda bulunan bütün dizeler(sequence) için, bütün yetkileri geri al.

REVOKE ALL PRIVILEGES ON ALL SEQUENCES 
IN SCHEMA schema_name FROM username;

Yukarıdaki şema içi yetkiler, veritabanına mevcut olan tablolar için geçerlidir. Eğer şemada yeni oluşturulan tablolar için de kullanıcıya tüm yetkiler vermek için şöyle bir ifade kullanılabilir:

ALTER DEFAULT PRIVILEGES
FOR USER username
IN SCHEMA schema_name
GRANT ALL ON TABLES TO username;

Startup Şehri San Francisco

22 May

Her yıl dünya üzerinde gerçekleşen yenilikçi girişimlerin (startups) yaklaşık yüzde 90’ı Amerika’nın San Francisco şehrinde bulunmaktadır. Yani şehir tam bir startup cenneti,  teknoloji girişimcileri için kutsal bir yer diyebiliriz. Her yıl binlerce startup kurucusu yeni bir hayalin peşinde çalışmalarına başlayıp en öne geçebilmek için çalışmaktadır. Bu durum ekosistemi, hayatta kalmak için son derece zor bir hale getirmektedir.

Bu kadar yoğun bir teknoloji girişiminin bulunduğu şirketler şehri, yeni girişimcilere gelecek ile ilgili bazı ipuçları da vermektedir. Şehir hem bir database hem de bir kılavuzdur.

Neden bir database?

Çünkü şehirde hangi şirketlerin bulunduğu, ne gibi işlerle uğraştıkları, hangi teknolojileri kullandıkları hakkında bilgiler mevcuttur.

Neden bir kılavuz?

Şirketlerin kullandıkları teknolojiler incelendiğinde bizlere yeni girişimleri hayata geçirirken, çantamıza neleri koymamız gerektiği hakkında bilgi vermekte ve bize yön göstermektedir. Yani teknoloji dünyasının ne yöne doğru yatkın olduğu görülebilmektedir. Örneğin ağırlıklı olarak hangi programlama dillerinin kullanıldığı incelendiğinde Amerika da çalışmak isteyen bir yazılımcı yatırım yapması gerektiği programlama dilini kolayca belirleyebilir.

Hayat Şartları

Şehre yeni gelen biri için geçinebilme maliyetleri inanılmaz yüksektir. Mesela studio dairelerin kirası $2500 civarıdır. Ofis kiralarını artık sis düşünün. Geçim sıkıntısının yanında şirketinizi, diğer şirketler ile rekabet edecek seviyelerde tutmak gibi zorluklarla da uğraşmak gerekmektedir.

Melek Yatırımcılar

Twitter ve Uber gibi şirketlerin doğum yeri olan şehirde, büyüyen startup’lar melek yatırımcılar tarafından desteklenmektedir. USA’da çalışmış bir kaynaktan duyduğum kadarıyla, belli kesimlerin amacına hizmet etmeyen girişimler, ağzıyla kuş tutsa bile yatırım alamaz ve yok olur gider. Dediğim gibi bu kısım bana da pek yanlış gelmeyen bir yorumdur.

Bu bilgileri San Francisco da yaşayarak değil orayı merak edip araştırırken elde etmiştim. Siz okuyucularla da paylaşmak istedim. Umarım faydalı olmuştur.

Kaynaklar:

  • https://thenextweb.com/podium/2019/08/13/a-san-francisco-startup-guide-for-international-entrepreneurs/
  • https://thenextweb.com/podium/2019/08/13/a-san-francisco-startup-guide-for-international-entrepreneurs/
  • https://fi.co/insight/san-francisco-startup-resource-list-550-accelerators-investors-and-more

Datum Nedir?

21 May

Datumlar, coğrafi koordinat sistemlerin oluşturulabilmesi için gerekli olan referans sistemleridir.

Enlem ve boylamlar, belirli bir yeri dünya yüzeyinde ifade etmek için kullanılırlar. Enlem ve boylamların daima datum cinsinden belirtildiğini unutmamak gerekir. Mevcut konumunuzun enlemi ve boylamı, farklı referans noktaları için farklıdır. Yani datum değiştiğinde coğrafi koordinat sistemi de değişeceğinden dolayı koordinat değerleri de değişir.

Örnek datum’lar:

  • North American Datum of 1927 (NAD 1927 or NAD27)
  • North American Datum of 1983 (NAD 1983 or NAD83)
  • World Geodetic System of 1984 (WGS 1984)

Bu iki datum’a ait bir kontrol noktasının (Redlands, California) derece/dakika/saniye (DMS) cinsinden koordinatlarını ele alalım.

North American Datum of 1983 (NAD 1983 or NAD83):

34 01 43.77884       -117 12 57.75961

 North American Datum of 1927 (NAD 1927 or NAD27):

34 01 43.72995        -117 12 54.61539

Bu iki datum arasında kontrol noktası koordinatlarının boylam değeri yaklaşık 3 saniye farklılık gösterirken, enlem değeri yaklaşık 0.05 saniye farklılık göstermektedir.

NAD 1983 ve WGS 84 çoğu uygulama için aynıdır. Kontrol noktasının WGS84 datumu için değerleri şu şekildedir:

34 01 43.778837       -117 12 57.75961

Jodezik Datumlar (Geocentric datums)

Son 15 yılda, uydu verileri, haritacılara, dünyadaki kütle merkezi ile koordinatları ilişkilendiren ve dünyaya en uygun küresel küreyi tanımlamaları için yeni ölçümler sağladı. Dünya merkezli bir datum, dünyanın kütle merkezini başlangıç noktası olarak kullanır. En son geliştirilen ve yaygın olarak kullanılan datum WGS 1984’tür. Dünya çapında konum ölçümü için bir çerçeve görevi görür.

Yerel Datumlar (Local Datums)

Yerel datum kendi refereans aldığı küremsi şeklini (spheroid), belirli bir bölgedeki dünya yüzeyine tam olarak uyacak şekilde hizalar. Küremsi referans üzerindeki bir nokta, yer yüzündeki bir konum ile eşleştirilir. Bu nokta, referans noktasının başlangıç noktası olarak bilinir. Başlangıç noktasının koordinatları sabittir ve diğer tüm noktalar bundan hesaplanır.

Yerel datum’a ait bir koordinat sisteminin orijini, dünyanın merkezinde değildir. Ancak yerel bir datum küresinin merkezi, dünyanın merkezinden dengelenir. NAD 1927 and the European Datum of 1950 (ED 1950) yerel datum’lardır. NAD 1927, Kuzey Amerika’ya oldukça iyi uyacak şekilde tasarlanmıştır. ED 1950 ise Avrupa’da kullanılmak üzere tasarlanmıştır. Yerel bir datum, yer yüzündeki belirli bir alana çok yakın hizalandığı için, tasarlandığı alan dışında kullanımı uygun değildir.

Sonuç

Datum’lar coğrafi koordinat sistemlerinin oluşturulabilmesi için gereklidir. Harita dünyasında kullanılan çok sayıda datum vardır. Datum’lar değiştikçe koordinatlar da değişir.

Kaynaklar:

  • https://desktop.arcgis.com/en/arcmap/latest/map/projections/datums.htm
  • https://www.maptoaster.com/maptoaster-topo-nz/articles/projection/datum-projection.html

Visual Studio Dotnet Core Web Api Proje Şablonu B3.Web.Template.V1

20 May

Bir aspnet core web api projesinde ihtiyaç duyulabilecek katmanları ve araçları bir araya getirerek B3.Web.Template.V1 bir proje şablonu hazırlayarak Github üzerinden yayınladım. Şablonu kullanabilmek için, projeyi Github üzerinden indirebilirsiniz.

Proje Katmanları

  • WebApi layer (B3.WebApi)
  • Application services layer (B3.Applcation)
  • Data access layer (B3.EntityFramework)
  • Domain layer (B3.Domain)
  • Infrastructure layer (B3.Infrastructure)

Katman ilişki şeması aşağıdaki gibidir.

Template Kullanımı

B3.Web.Template.V1 projesini indirin. Visual Studio 2019 için kullanılacak ise indirilen B3WebTemplate.zip dosyasını ProjectTemplates dizinine  ekleyin. Örneğin kenid bilgisayarımdaki yol şu şekildedir: (C:\Users\User\Documents\Visual Studio 2019\Templates\ProjectTemplates)

Visual Studio’yu açın ve yeni proje ekleme adımını uygulayın.

Proje adını girin.

Artık yeni web api projeniz tüm katmanlarıyla hazır hale gelmiştir.

B3.Extensions.Data Entity Framework Eklentisi

19 May

Entity Framework Core üzerinde yaptığım çalışmalarda gerek duyduğum araçları bir kütüphanede toparlıyorum ve Github üzerinden B3.Extensions.Data adında açık kaynak kütüphane olarak yayınlamaya ve Nuget paketleri halinde sunmaya başladım.

Nuget Yüklemesi

Kütüphaneyi Nuget üzerinden projelerinize aşağıdaki gibi yükleyebilirsiniz:

Install-Package B3.Extensions.Data

DbContextExtensions.cs

Extension Method’lar:

  • ExecuteQuery(string query, params object[] parameters)
  • ExecuteQueryAsync(string query, params object[] parameters)

Entity Framework Core 2.1 sürümünden itibaren düz SQL sorguları yapmak için bir Entity türüne ihtiyacınız vardır. (Bu durum daha sonraki versiyonlarda değişebilir.) Özel bir SQL query string çalıştırmak için DbSet<> tipine ait FromSQL() extension metodu kullanılır.

var blogs = context.Blogs
                   .FromSqlRaw("SELECT * FROM dbo.Blogs")
                   .ToList();

Ancak birden fazla tablonun birleştirilerek üretilen karmaşık sorguların kullanılması gerektiği durumlarda, bu yöntemin işe yaramaz. Bu durumda B3.Extensions.Data kütüphanesi kullanılabilir.

Örneğin asp.net core action metodu içerisinde şu şekilde kullanılabilir.

public async Task<IActionResult> Get()
{
   var sql = "SELECT type, SUM(length) FROM ways GROUP BY type";
   var queryResult = await _context.ExecuteQueryAsync(sql);

   return Ok(response);
}

ModelBuilderExtensions.cs

Extension Method’lar:

  • UseSoftDelete<TSoftDelete>(this ModelBuilder modelBuilder)

Eğer projelerinizde SoftDelete gibi bir yöntem uyguluyorsanız, bu aracı kullanabilirsiniz. Bu araç sayesinde veritabanından soft delete yapılmış kayıtlar filitrelenir ve getirilmez. Bu metodu kullanabilmek için soft delete kullanan Entity tiplerinizi, içerisinde “IsDeleted” adında bir boolean property bulunması gerekmektedir.

public interface ISoftDelete
{
   bool IsDeleted {get; set;}
}

public class Student: ISoftDelete
{
     public bool IsDeleted {get; set;}
}

PostgreSQL Kullanıcı ve Veritabanı Oluşturma

18 May

Bu yazıda, komut satırı kullanılarak PostgreSQL’de veritabanlarının ve kullanıcıların nasıl ekleneceği ve silineceği açıklanmaktadır.

Kullanıcı Oluşturma İşlemi

Her PostgresSQL kurulumunda, postgres adında bir süper kullanıcı oluşturulur. Başlangıçta, başka kullanıcılar (rol olarak da adlandırılır) oluşturulana kadar PostgreSQL’e postgres kullanıcısı olarak bağlanmanız gerekir.

sudo su postgres

Bu komut ile giriş yaptıktan sonra PostgreSQL süper kullanıcısı olarak işlemler yapılabilir.

Yeni bir kullanıcı oluşturmak için gerekli bir sürü parametre bulunmaktadır. Parametrelerin tam listesine buradan ulaşabilirsiniz. Ancak –interactive ve –pwprompt parametrelerini kullanarak, işlem adımlarını konsoldan size sormasını sağlayarak ilerleyebiliriz.

createuser –interactive –pwprompt

Bu şekilde, adımlarda sorulan bilgileri girerek ilerleyebilirsiniz. Artık administrator adında yeni bir kullanıcı oluşturulmuştur.

Kullanıcıları listelemek için psql komutunu ile PostgreSQL terminaline giriş yaparak \du komutu ile kullanıcıları görebilirsiniz. (psql komutu girildiğinde terminal satırı postgres=# şeklinde görüntülenecektir.)

Şu anda sistemde sadece iki kullanıcı mevcuttur.

Veritabanı Oluşturma İşlemi

PostgreSQL’de yeni bir veri tabanı oluşturmak için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır. Şu an sistemde administrator ve postgres kullanıcıları bu yetkilere sahiptir.

sudo su postgres

Komutu ile giriş yaptıktan sonra veritanbanı oluşturma komutu olan ceratedb komutu çalıştırılır.

createdb -O administrator mydb

Artık mydb adında yeni bir veritabanı oluşturulmuştur. psql komutunu girerek \l komutu ile tüm veritabanları listelenebilir.

Veritabanına Kullanıcı Ekelme İşlemi

Bir kullanıcının, bir veritabanı üzerinde işlem yapabilmesi için, ilgili işlem adına yetkilendirilmesi gerekmektedir.

bucuncu adında bir kullanıcı oluşturalım:

createuser –interactive –pwprompt

bucuncu kullanıcısına, mydb veritabanı bağlantı yetkisi verelim:

GRANT connect ON DATABASE mydb TO bucuncu;

Veritabanı Silme İşlemi

PostgreSQL’de yeni bir veri tabanı silmek için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropdb komutu ile veritabanı silinebilir.

dropdb mydb

Artık mydb veritabanı sistemden silinmiştir.

Kullanıcı Silme İşlemi

PostgreSQL’de yeni bir veri tabanı silmek için, yine postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropuser komutu ile kullanıcı sistemden silinebilir.

dropuser administrator

Not: Kullanıcı herhangi bir veritabanına veya başka bir nesneye sahipse, kullanıcıyı silemezsiniz. Silmek istediğinizde aşağıdaki gibi bir hata oluşur:

dropuser: removal of role "username" failed: 
ERROR:  role "username" cannot be dropped because some 
objects depend on it
DETAIL:  owner of database "database"

Kullanıcıyı silebilmek için sahip, veritabanı sahibini değiştirmelisiniz.

PostgreSQL UUID veri tipi

18 May

Universally Unique Identifiers (UUID) olarak bilinen ve Postgresql veritabanında uuid olarak adlandırılan bir veri tipi bulunmaktadır. Bazı sistemler bu veri türünü genel olarak benzersiz bir tanımlayıcı veya GUID olarak adlandırır. Benzersiz olarak üretilmesi nedeniyle, dağıtık sistemler için bu veri türü, tek bir veritabanı içinde ID üretimi bakımından sıralı üreteçlerden daha iyi bir benzersizlik garantisi sağlar.

UUID veri tipi, tire işaretleriyle ayrılmış birkaç grup halinde ifade edilir. Özellikle 8 basamaklı ilk grup ve ardından 4 basamaklı üç grup ve onn ardından 12 basamaklı bir grup olarak küçük harfli onaltılık basamak dizisi olarak yazılır. Bu standart formdaki bir UUID örneği:

e0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

PostgreSQL veri tabanı, ayrıca aşağıdaki UUID formlarını da kabul eder.

A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}

PostgreSQL veri tabanından benzersiz uuid üretebilmek için uuid-ossp eklentisinin aktif edilmesi gerekmektedir. Bu eklentiyi aktif etmek için aşağıdaki komut kullanılabilir.

CREATE EXTENSION "uuid-ossp";

Bu komutu çalıştırıldığında, Postgresql’e uuid üretebilen fonksiyonlar eklenmektedir.

  • uuid_generate_v1()
  • uuid_generate_v1mc()
  • uuid_generate_v4()
  • uuid_nil()

uuid_generate_v1()

Bilgisayarın MAC adresi, geçerli zaman damgası ve rastgele bir değer kombinasyonuna göre UUID değerleri oluşturmak için uuid_generate_v1 () işlevi kullanılır.

SELECT uuid_generate_v1();

uuid_generate_v1mc()

Bu fonksiyon, sürüm 1 UUID oluşturur, ancak bilgisayarın gerçek MAC adresi yerine rasgele multicast MAC adresi kullanır.

SELECT uuid_generate_v1mc();

uuid_generate_v4()

Yalnızca rastgele sayılara dayalı bir UUID değeri oluşturmak istiyorsanız uuid_generate_v4 () fonksiyonunu kullanabilirsiniz.

SELECT uuid_generate_v4();

uuid_nil()

Sadece sıfırlardan oluşan bir uuid değeri üretir.

SELECT uuid_nil();

Tabloda uuid Alanı Kullanımı

CREATE TABLE messeges (
    id uuid DEFAULT uuid_generate_v4(),
    content VARCHAR NOT NULL,
    PRIMARY KEY (id)
);

Tabloya veri girişi:

INSERT INTO messages 
    (content)
VALUES
    ('Hi'),
    ('This is'),
    ('my message');

Veri Boyutu ve Performans

uuid veri tipi 16 byte boyutunda binary değere sahiptir. Bu nedenle sorgularda çok büyük performans artışı sağlar. Aynı boyuttaki bir text ile karşılaştıracak olursak:

select
    pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::text) 
       as text_size,
    pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::uuid) 
       as uuid_size;


 text_size | uuid_size 
-----------+-----------
        40 |        16

Ubuntu 18.04 üzerine PostgreSQL 12 kurulumu

17 May

PostgreSQL veritabanı, Linux gibi tamamen ücretsizdir ve açık kaynak kodludur. Bu yazıda Linux Ubuntu 18.04 dağıtımı üzerine PostgreSQL kurulumu anlatılmaktadır.

Ubuntu 18.04 dağıtımı üzerine Postgresql 12 kurulumu yapmak için öncelikle repository paket versiyonunu kontrol etmek gerekmektedir. Repository paket kontrolünün nasıl yapıldığına bir önceki yazıdan ulaşabilirsiniz.

PostgreSQL Kurulumu

Ubuntu sürümünüzde bulunan PostgreSQL sürüm istediğiniz sürüm değilse, güncellemek için PostgreSQL Apt Repository kullanılabilir. Bunun için öncelikle yapılması gereken:

/etc/apt/sources.list.d/pgdg.list

dosyası oluşturmaktır. Bu dosyanın içerisine aşağıdaki satır eklenmelidir.

deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main

Daha sonra depo imzalama anahtarını (signing key) içe aktarılmalı ve paket listeleri güncellenmelidir.

sudo apt-get update

Artık ortam postgresql 12 yüklemesi için hazır durumdadır. Yükleme komutu:

sudo apt-get -y install postgresql-12 postgresql-client-12

Yükleme tamamlandığında, postgresql servisini başlatmak için gerekli komut:

sudo systemctl start postgresql

artık servis durumu kontrol edilebilir.

sudo systemctl status postgresql

PostgreSQL Bağlantısı

PostgreSQL kurulumu sonrasında Ubuntu kullanıcılarına postgres adında bir sistem kullanıcısı otomatik olarak oluşturulur. Başlangıçta, diğer kullanıcılar oluşturulana kadar bu kullanıcısı ile PostgreSQL’e bağlanmanız gerekir.

sudo su postgres

komutu ile postgres kullanıcısına geçilerek psql komutu çalıştırıldığında artık veritabanı komutlarını kullanabilirsiniz.

\l

komutu ile veritabanları listelenebilir.

\c postgres

komutu ile postgres veri tabanına bağlanabilirsiniz. (Kurulum sırasında postgres veritabanı otomatik olarak oluşturulur.)

Postgresql veritabanını konsol ortamından yönetmek biraz kullanışsızdır. Bunun yerine pgAdmin, Datagrip gibi araçlar tercih edilmelidir.

PostgreSQL Remote Ayarları

Postgresql sunucusu dışından bağlantı yapabilmek için uzak bağlantı ayarlarını yapmak gerekmektedir. Bu ayarlar aşağıdaki dosyada bulunmaktadır.

/etc/postgresql/12/main/postgresql.conf

Bu dosya vim editörü ile açılarak

listen_addresses = '*'

satırı açık konuma getirilmelidir.

Daha sonra,

etc/postgresql/12/main/pg_hba.conf

dosyasında ip tanımlaması yapılmalıdır. (hba: host based authentication)

  • “host   all   all   212.0.103.8/32   md5″ şeklinde ayarlama yaparsanız istediğiniz tek bir adresten erişim sağlayabilirsiniz. Bu ip dışından bağlantı sağlanamaz.
  • “host   all   all   0.0.0.0/0          md5″ şeklinde ayarlama yaparsanız herhangi bir ip üzerinden sunucuya bağlanabilirsiniz. Burada password authentication kimlik doğrulama yöntemi ve  md5 algoritması kullanılmıştır. (Postgresql veri tabanında ayrıca trust, ident, peer, GSSAPI, LDAP kimlik doğrulama yöntemleri de mevcuttur.)

(Postgre

Bu ayarların yapıldıktan sonra aktif olabilmesi için postgresql servisinin yeniden başlatılması gerekmektedir.

sudo systemctl restart postgresql

Artık veritabanına uzak bağlantı sağlanabilir.

Ubuntu repository paketi sürüm kontrolü

16 May

Window gibi işletim sistemlerinde, kullanmak istediğimiz programlar exe, msi gibi paketler halinde dağıtılırken, Ubuntu gibi sistemlerde, ihtiyacınız olan programlar ve kitaplıklar .deb dosyalarında paketlenir ve dağıtılır. Bu dosyalar indirilebilir veya CD ortamında size gelebilir.

Ubuntu gibi sistemlerde “repository” diye adlandırılan paket depoları mahiyetinde kullanılan sunucular bulunmaktadır. Bu depolarda bulunan paketlere genellikle Synaptic gibi araçlarla erişirsiniz. Bu araçlar, sisteminizde yüklü olan paketleri ve depoda yüklemeye hazır durumda bulunan paketlerin listeler.

Ubuntu kurulduğunda mevcut Synaptic repository listesinde, kullanıcılara gerekli olan  programların o güne kadar güncellenmiş sürümleri bulunmaktadır. Ancak programlar işletim sistemlerinden daha hızlı gelişim gösterebilmektedirler. Ubuntu ortamına kurulmak istenen bir program “apt-get install” komutu ile yüklenirse, listedeki son sürümü indirip yüklenir. Bu nedenle, bir programı yüklemeden önce versiyon kontrolü yapmak faydalı olabilir. Örneğin postgresql versiyon kontrolü için kullanılacak komut şu şekildedir:

apt-cache policy postgresql

Bu komut çalıştırıldığında, sistemdeki postgresql durumunu listeler.

  • Listede 3 farklı sürümden bahseder. Bunlar;  10.13-1.pgdg18.04, 10.12-0ubuntu0.18.04.1 ve  10.3-1. Ayrıca hangi depolardan geldiklerini de gösterir.
  • Installed (none) bilgisi bize sistemde yüklü bir postgresql kurulumu olmadığını gösterir.
  • Candidate bilgisi, şu anda apt-get install komutu çalıştırıldığında yüklenecek sürüm bilgisini verir.