Esnek sunucuda uzantıları ve modülleri kullanırken dikkat edilmesi gerekenler PostgreSQL için Azure Veri Tabanı

Bu makalede, esnek PostgreSQL için Azure Veri Tabanı sunucuda belirli uzantıların veya modüllerin kullanılmasıyla ilgili önemli noktalar açıklanmaktadır.

Uzantılar için genel dikkat edilmesi gerekenler

Esnek PostgreSQL için Azure Veri Tabanı sunucuda uzantı kullanmak için şunları yapmanız gerekir:

  • Uzantıya izin ver. Uzantıya izin vermezseniz, CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION veya COMMENT ON EXTENSION çalıştırma girişimleri, söz konusu uzantıya izin verilmediğini belirten bir hatayla başarısız olur.
  • Uzantı, paylaşılan belleği ayırmayı ve bunlara erişmeyi gerektiren bir paylaşılan ikili kitaplık dağıtıyorsa ve sunucu başlatıldığında yüklenmesi gerekiyorsa , yük kitaplıklarında sağlanan yönergeleri izleyin.
  • Uzantıyla birlikte gelen SQL nesnelerinin kurulmasını istediğiniz veritabanlarında uzantı oluşturun.
  • Uzantıyı kaldırın. Bu uzantı tarafından dağıtılan tüm SQL nesnelerini veritabanından kaldırmak istediğinizde.
  • Uzantıları güncelleştirerek, zaten yüklü olan bir uzantı tarafından dağıtılan tüm SQL yapıtlarını en yeni sürümüne güncelleştirin.
  • Yüklü uzantıları ve bunların karşılık gelen sürümlerini görüntüleyin.

PostgreSQL için Azure Veri Tabanı esnek sunucunuzda , CREATE EXTENSION, ALTER EXTENSIONveya DROP EXTENSION komutlarını yürütürken COMMENT ON EXTENSIONhata alırsanız olası hataların listesine bakın ve her hatanın nedeni ne olabilir?

Modüller için genel dikkat edilmesi gerekenler

PostgreSQL için Azure Veri Tabanı Esnek Sunucu’da bir modülü kullanmak için, kitaplıkları yükleme bölümünde açıklandığı gibi modülü shared_preload_libraries parametresine ekleyin.

Modüllerin izin verilenler listesine alınması gerekmez. Bu, uzantılar için özel bir gereksinimdir.

Dikkat edilmesi gereken belirli noktalara sahip uzantılar

Aşağıdaki liste, PostgreSQL için Azure Veri Tabanı esnek sunucuda kullanıldığında dikkat edilmesi gereken tüm desteklenen uzantıları numaralandırır:

  • AGE
  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • pgcrypto
  • postgres_fdw
  • pgstattuple

AGE

Apache AGE uzantısı, PostgreSQL için Azure Veritabanı tarafından desteklenen postgreSQL için bir grafik uzantısıdır. Graf veritabanı işlevleri, açık şifreleme sorgusu desteği ve PostgreSQL'de depolanan grafik verileri üzerinde karmaşık sorgular yürütme olanağı sağlar. 'Apache AGE', Apache Lisansı 2.0 altında yayımlanan açık kaynaklı bir projedir.

AGE'yi yükleme

AGE kullanmak için, işlevselliğini kullanmayı planladığınız veritabanında uzantının 'allowlist' edildiğinden, kütüphanesinin yüklendiğinden ve uzantının kurulduğundan emin olun.

dblink uzantısı, bir PostgreSQL için Azure Veri Tabanı Esnek Sunucusu'ndan başka bir sunucuya veya aynı sunucudaki başka bir veritabanına bağlanmanıza olanak tanır. PostgreSQL için Azure Veritabanı, herhangi bir PostgreSQL sunucusuna hem gelen hem de giden bağlantıları destekler. Gönderen sunucunun alıcı sunucuya giden bağlantılara izin verebilmesi gerekir. Benzer şekilde, alıcı sunucunun gönderen sunucudan bağlantılara izin vermesi gerekir.

Bu uzantıyı kullanmayı planlıyorsanız sunucularınızı sanal ağ tümleştirmesi ile dağıtın. Varsayılan olarak, sanal ağ tümleştirmesi sanal ağdaki sunucular arasında bağlantılara izin verir. Erişimi özelleştirmek için sanal ağ güvenlik gruplarını kullanmayı da seçebilirsiniz.

pg_buffercache

pg_buffercache shared_buffers içeriğini incelemek için uzantıyı kullanın. Bu uzantıyı kullanarak, içinde belirli bir ilişkinin önbelleğe alınıp alınmadığını shared_buffersbelirleyebilirsiniz. Bu uzantı, önbelleğe almayla ilgili performans sorunlarını gidermenize yardımcı olabilir.

Bu uzantı PostgreSQL'in temel yüklemesinin bir parçasıdır ve kolayca yüklenebilir.

CREATE EXTENSION pg_buffercache;

pg_cron

Uzantı pg_cron , veritabanı içinde uzantı olarak çalışan postgreSQL için basit, cron tabanlı bir iş zamanlayıcıdır. Uzantı, pg_cron PostgreSQL veritabanında zamanlanmış bakım görevlerini çalıştırabilir. Örneğin, bir veritabanı tablosunu periyodik olarak vakumlayabilir veya eski veri görevlerini kaldırabilirsiniz.

Uzantı pg_cron birden çok işi paralel olarak çalıştırabilir, ancak aynı anda işin en fazla bir örneğini çalıştırır. İkinci çalışmanın, birinci çalıştırma tamamlanmadan başlaması gerekiyorsa, ikinci çalışma kuyruğa alınır ve birinci çalıştırma biter bitmez başlatılır. Bu şekilde, işlerin planlandığı sayıda çalışmasını ve aynı anda birden fazla kez çalışmamasını sağlar.

Ayarlandığı değer shared_preload_libraries, pg_cron içerdiğinden emin olun. Bu uzantı, CREATE EXTENSION komutunun yürütülmesi sonucunda kitaplığın yüklenmesini desteklemez. Uzantı eklenmediyse veya eklendikten sonra sunucu shared_preload_libraries yeniden başlatılmadıysa, CREATE EXTENSION'ı çalıştırma girişimi, metninde pg_cron can only be loaded via shared_preload_libraries ifadesi olan ve ipucu Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf olan bir hatayla sonuçlanır.

kullanmak pg_cron için, sunucu başlatıldığında paylaşılan kitaplığını yüklediğinizden, izinli listede olduğundan ve oluşturduğu SQL yapıtlarını kullanarak işlevselliğiyle etkileşim kurmak istediğiniz herhangi bir veritabanına yüklendiğinden emin olun.

Examples

  1. Eski verileri Cumartesi günü saat 03:30'da (GMT) silmek için.

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Varsayılan veritabanı postgres'da vakumu her gün saat 10:00'da (GMT) çalıştırmak için.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. pg_cron'den tüm görevleri zamanlamadan çıkarmak.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. pg_cron ile şu anda zamanlanmış tüm işleri görmek için.

    SELECT * FROM cron.job;
    
  5. Vakum işlemini her gün saat 10:00'da (GMT) veritabanı test cron içindeki rol hesabı azure_pg_admin altında çalıştırmak için.

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

Diğer örnekler

pg_cron Sürüm 1.4'ten itibaren, cron.schedule_in_database ve cron.alter_job işlevlerini kullanarak işinizi belirli bir veritabanında zamanlayabilir ve mevcut bir zamanlamayı güncelleyebilirsiniz.

cron_schedule_in_database işlevi, kullanıcı adını isteğe bağlı bir parametre olarak almaya izin verir. Kullanıcı adını null olmayan bir değere ayarlamak için PostgreSQL süper kullanıcı ayrıcalığı gerekir ve esnek PostgreSQL için Azure Veri Tabanı sunucuda desteklenmez. Önceki örneklerde, bu işlevin, isteğe bağlı bir kullanıcı adı parametresi atlanmış veya null olarak ayarlanmış şekilde çalıştırılması gösterilmektedir; bu durumda, işi zamanlayan kullanıcının bağlamında çalışır ve kullanıcının azure_pg_admin rol ayrıcalıklarına sahip olması gerekir.

  1. DbName veritabanındaki eski verileri Cumartesi günü saat 03:30'da (GMT) silmek için.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. Mevcut zamanlamada veritabanı adını güncelleştirmek veya değiştirmek için

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

pg_hint_plan

Uzantı, pg_hint_plan AŞAĞıDAKIler gibi SQL açıklamalarında "ipuçları" kullanarak PostgreSQL yürütme planlarında ince ayarlamalar gerçekleştirmenizi sağlar:

/*+ SeqScan(a) */

Uzantı, pg_hint_plan hedef SQL deyimiyle verilen özel formun açıklamasında ipucu tümceciklerini okur. Belirli bir form karakter dizisiyle /*+ başlar ve ile */biter. İpucu tümcecikleri, ipucu adlarından ve parantez içine alınmış ve boşluklarla sınırlandırılmış aşağıdaki parametrelerden oluşur. Okunabilirliği artırmak için yeni satırlar, her ipucu tümceciğini sınırlamak amacıyla kullanılabilir.

Example:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

Yukarıdaki örnek, planlayıcının seqscan tablosundaki a sonuçlarını, b tablosuyla hashjoin olarak birleştirmek için kullanmasına neden olur.

Uzantıyı kullanmak için uzantıyı pg_hint_planizin verilenler listesine eklediğinizden, kitaplığını yüklediğinizden ve uzantıyı işlevselliğini kullanmayı planladığınız veritabanına yüklediğinizden emin olun.

pg_prewarm

Uzantı, pg_prewarm ilişkisel verileri önbelleğe yükler. Önbelleklerinizi önceden hazırladığınızda, sorgularınızın yeniden başlatmadan sonraki ilk çalıştırmalarında daha iyi yanıt süreleri olur. PostgreSQL için otomatik uyarı işlevselliği şu anda Azure Veritabanı'nda kullanılamaz.

pg_repack

pg_repack uzantısını ilk kez kullanan kullanıcılar genellikle şu soruyu sorar: pg_repack, bir uzantı mı, yoksa psql ya da pg_dump gibi istemci tarafında çalışan bir yürütülebilir dosya mı?

pg_repack aslında ikisi de. pg_repack/lib , oluşturduğu şema ve SQL yapıtları ve bu işlevlerden birkaçının kodunu uygulayan C kitaplığı dahil olmak üzere uzantının koduna sahiptir.

Öte yandan , pg_repack/bin , uzantıda uygulanan programlama öğeleriyle nasıl etkileşim kuracaklarını bilen istemci uygulamasının kodunu içerir. Bu istemci uygulaması, sunucu tarafı uzantısının ortaya çıkardığı farklı arabirimlerle etkileşim kurmanın karmaşıklığını kolaylaştırmayı amaçlar. Kullanıcıya anlaşılması daha kolay olan bazı komut satırı seçenekleri sunar. İstemci uygulaması, bağlandığı veritabanında oluşturulmuş uzantı olmadan işe yaramaz. Sunucu tarafı uzantısı kendi başına tamamen işlevseldir, ancak kullanıcının karmaşık bir etkileşim desenini anlamasını gerektirir. Bu örüntü, uzantının uyguladığı işlevlere girdi olarak kullanılan verileri almak için sorguların yürütülmesinden oluşur ve bu şekilde devam eder.

Şema yeniden paketleme için izin reddedildi

Şu anda, uzantı repack şemasına izinler verdiği için, pg_repack bağlamından yalnızca azure_pg_admin işlevselliğini çalıştırmayı destekleyebilirsiniz.

azure_pg_admin olmayan bir tablonun sahibi pg_repack komutunu çalıştırmayı denerse aşağıdaki hatayı alabileceğini fark edebilirsiniz:

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

Bu hatayı önlemek için pg_repack bağlamında azure_pg_admin çalıştırın.

pg_stat_statements

pg_stat_statements uzantısı, veritabanınızda çalışan tüm sorguların bir görünümünü sağlar. Bu bilgiler, üretim sistemindeki sorgu iş yükü performansınızı anlamak için kullanışlıdır.

pg_stat_statements uzantısı, SQL deyimi yürütme istatistiklerini izleme aracı sağlamak için her PostgreSQL için Azure Veri Tabanı esnek sunucuya önceden yüklenirshared_preload_libraries.

Güvenlik nedeniyle, pg_stat_statements uzantısınıizin verilenler listesine eklemeli ve CREATE EXTENSION komutunu kullanarak yüklemelisiniz.

uzantısının hangi deyimleri izlediğini denetleyen ayarı pg_stat_statements.trackvarsayılan olarak topayarlanır; yani doğrudan istemciler tarafından verilen tüm deyimler izlenir. Diğer iki izleme düzeyi none ve all. Bu ayarı parametre olarak yapılandırabilirsiniz.

pg_stat_statements uzantısının sağladığı sorgu yürütme bilgileri ile, her SQL ifadesini günlüğe kaydettiği için sunucu performansı arasında bir ödünleşim vardır. pg_stat_statements uzantısını etkin olarak kullanmıyorsanız, pg_stat_statements.track değerini none olarak ayarlayın. Bazı üçüncü taraf izleme hizmetleri sorgu performansı içgörüleri sunmak için kullanabilir pg_stat_statements , bu nedenle sizin için uygun olup olmadığını onaylayın.

pgcrypto

PostgreSQL için Azure Veri Tabanı, pgcrypto PostgreSQL uzantısı aracılığıyla uygulama düzeyinde, sütun düzeyinde şifrelemeyi destekler. pgcrypto uzantısı, uygulamaların temel alınan OpenSSL kitaplığı tarafından sağlanan şifreleme algoritmalarını kullanarak sütun değerlerini şifrelemek veya karma yapmak için PostgreSQL SQL deyimlerinde şifreleme işlevlerini açıkça çağırmasına olanak tanır.

Azure Linux 3.0'dan başlayarak işletim sistemi, bazı eski ve daha zayıf şifreleme algoritmalarını ve alt düzey API'leri varsayılan olarak yüklenmeyen ayrı bir eski sağlayıcıya taşıyan OpenSSL 3.0'ı kullanır. Bu değişiklik modern, daha güvenli şifreleme algoritmaları ve üst düzey OpenSSL EVP (Zarf) API'lerinin kullanılmasını teşvik eder.

Sonuç olarak, OpenSSL 3.0’ın eski olarak sınıflandırdığı kriptografik algoritmalar, Azure Linux 3.0 çalıştıran PostgreSQL için Azure Veri Tabanı sunucularında pgcrypto tarafından varsayılan olarak kullanılamaz.

Kullanım dışı şifreleme algoritmaları

Aşağıdaki eski şifreleme algoritmaları OpenSSL 3.0 eski sağlayıcısındadır ve Linux 3.0 Azure çalıştıran PostgreSQL için Azure Veri Tabanı sunucularda varsayılan olarak kullanılamaz. Önceki platform sürümleri pgcrypto'ya bu algoritmaları kullanma izni verebilirdi, ancak Azure Linux 3.0 artık bunları desteklememektedir.

Simetrik şifreleme algoritmaları (şifreler)

  • Blowfish (BF-CBC)
  • CAST
  • DES (tek DES; 3DES değil)
  • FİKİR
  • RC2
  • RC4
  • RC5
  • TOHUM

İleti özeti ve karma algoritmaları

  • MD2
  • MD4
  • MDC2
  • RIPEMD-160
  • SHA-1 (dijital imzalar için kullanım dışıdır, ancak yapılandırmaya bağlı olarak belirli HMAC senaryoları için izin verilmeye devam edebilir)
  • Whirlpool

Azure Linux 3.0'a PostgreSQL için Azure Veri Tabanı yükseltmeleri, devam eden platform geliştirmelerinin bir parçasıdır. pgcrypto kullanan uygulamalar, uygulama düzeyinde, sütun düzeyinde şifreleme gerçekleştirirken modern, desteklenen şifreleme algoritmaları kullandıklarını güvence altına almalıdır.

postgres_fdw

Uzantı, postgres_fdw bir PostgreSQL için Azure Veri Tabanı esnek sunucudan başka bir sunucuya veya aynı sunucudaki başka bir veritabanına bağlanmanızı sağlar. PostgreSQL için Azure Veritabanı, herhangi bir PostgreSQL sunucusuna hem gelen hem de giden bağlantıları destekler. Gönderen sunucunun alıcı sunucuya giden bağlantılara izin verebilmesi gerekir. Benzer şekilde, alıcı sunucunun gönderen sunucudan bağlantılara izin vermesi gerekir.

Bu uzantıyı kullanmayı planlıyorsanız sunucularınızı sanal ağ tümleştirmesi ile dağıtın. Varsayılan olarak, sanal ağ tümleştirmesi sanal ağdaki sunucular arasında bağlantılara izin verir. Erişimi özelleştirmek için sanal ağ güvenlik gruplarını kullanmayı da seçebilirsiniz.

pgstattuple

Postgres 11’den 13’e kadar olan sürümlerde, pgstattuple şemasında tutulan nesnelerden demet istatistiklerini almaya çalışmak için pg_toast uzantısını kullandığınızda, "şema pg_toast için izin reddedildi" hatasını alırsınız.

Şema pg_toast için izin reddedildi

PostgreSQL için Azure Veri Tabanı Esnek Sunucusu'nda PostgreSQL 11 ile 13 sürümlerini kullanan müşteriler, pg_toast şeması içindeki nesnelerde pgstattuple uzantısını kullanamaz.

PostgreSQL 16 ve 17'de pg_read_all_data rolü, azure_pg_admin öğesine otomatik olarak verilir; bu sayede pgstattuple düzgün şekilde çalışır. PostgreSQL 14 ve 15'te müşteriler, aynı sonucu elde etmek için pg_read_all_data rolünü azure_pg_admin'e el ile verebilir. Ancak PostgreSQL 11'den 13'e kadar, pg_read_all_data rolü mevcut değildir.

Müşteriler gerekli izinleri doğrudan veremiyor. pgstattuple şeması altındaki nesnelere erişmek için pg_toast komutunu çalıştırmanız gerekiyorsa, bir Azure destek isteği oluşturun.

timescaleDB

timescaleDB Uzantı, PostgreSQL uzantısı olarak paketlenmiş bir zaman serisi veritabanıdır. Zaman odaklı analitik işlevler ve iyileştirmeler sağlar ve Postgres'i zaman serisi iş yükleri için ölçeklendirir. Timescale, Inc. PostgreSQL için Azure Veritabanı'nın TimescaleDB Apache-2 sürümünün kayıtlı ticari markası olan TimescaleDB hakkında daha fazla bilgi edinin.

TimescaleDB'yi yükleme

timescaleDB kullanmak için, uzantının izin listesine alındığından, kitaplığının yüklendiğinden ve işlevselliğini kullanmayı planladığınız veritabanına uzantının yüklendiğinden emin olun.

Artık sıfırdan bir TimescaleDB hiper tablosu oluşturabilir veya PostgreSQL'de mevcut zaman serisi verilerini geçirebilirsiniz.

ve pg_dumpkullanarak pg_restore zaman ölçeği veritabanını geri yükleme hakkında daha fazla bilgi için Zaman Ölçeği belgelerine bakın.

Timescaledb-backup kullanarak Zaman Ölçeği veritabanını geri yükleme

Yordamı çalıştırırken, timescaledb.restoring bayrağını güncelleştirirken izinlerin reddedilmesiyle karşılaşabilirsiniz. Bu hatayı alma nedeniniz, Cloud PaaS veritabanı hizmetlerinde sınırlı ALTER DATABASE izni olmasıdır. Bu durumda, Timescale veritabanını yedeklemek ve geri yüklemek için alternatif bir yöntem olarak timescaledb-backup aracını kullanabilirsiniz. Timescaledb-backup, Bir TimescaleDB veritabanının dökümünü alma ve geri yükleme işlemlerini daha basit, daha az hataya açık ve daha yüksek performanslı hale getiren bir programdır.

Bunu yapmak için aşağıdaki adımları izleyin:

  1. Burada ayrıntılı olarak açıklandığı gibi araçları yükleyin.

  2. PostgreSQL için Azure Veri Tabanı için bir hedef esnek sunucu ve veritabanı oluşturun.

  3. Zaman Ölçeği uzantısını etkinleştirin.

  4. azure_pg_admin rolünü ts-restore tarafından kullanılan kullanıcıya verin.

  5. Veritabanını geri yüklemek için ts-restore komutunu çalıştırın.

Bu yardımcı programlar hakkında daha fazla ayrıntıya buradan ulaşabilirsiniz.

Uzantılar ve ana sürüm yükseltmesi

PostgreSQL için Azure Veri Tabanı, PostgreSQL için Azure Veri Tabanı esnek sunucunun yerinde yükseltmesini gerçekleştiren, kullanıcının basit bir etkileşimiyle yerinde ana sürüm yükseltme özelliği sunar. Yerinde ana sürüm yükseltmesi PostgreSQL için Azure Veritabanı yükseltme işlemini basitleştirerek sunucuya erişen kullanıcıların ve uygulamaların kesintiye uğramasını en aza indirir. Yerinde ana sürüm yükseltmeleri belirli uzantıları desteklemez ve belirli uzantıları yükseltmeye yönelik bazı sınırlamalar vardır.

, , anon, Apache AGE, dblink, orafceve postgres_fdw uzantılarıtimescaledb, yerinde ana sürüm güncelleştirme özelliği kullanılırken tüm PostgreSQL için Azure Veri Tabanı esnek sunucu sürümleri için desteklenmez.

Dikkat edilmesi gereken belirli noktalara sahip modüller

Aşağıdaki liste, PostgreSQL için Azure Veri Tabanı esnek bir sunucuda kullanıldığında dikkat edilmesi gereken tüm desteklenen modülleri numaralandırır:

  • pg_failover_slots

pg_failover_slots

Modül, pg_failover_slots hem mantıksal çoğaltma hem de yüksek kullanılabilirlik özellikli sunucularla çalışırken PostgreSQL için Azure Veritabanı'nı geliştirir. Standart PostgreSQL motorunun yük devretme sonrasında mantıksal çoğaltma yuvalarını koruyamaması sorununu etkili bir şekilde çözer. Bu yuvaların korunması, birincil sunucu rolü değişiklikleri sırasında çoğaltma duraklamalarını veya veri uyuşmazlıklarını önlemek ve işletimsel sürekliliği ve veri bütünlüğünü sağlamak için kritik öneme sahiptir.

Uzantı, çoğaltma yuvalarının gerekli aktarımını, temizlemesini ve eşitlemesini yöneterek yük devretme işlemini kolaylaştırır ve böylece sunucu rolü değişiklikleri sırasında sorunsuz bir geçiş sağlar.

pg_failover_slots modülü kullanma hakkında daha fazla bilgi ve yönergeler bulabilirsiniz.

pg_failover_slots modülünü kullanmak için, sunucu başladığında kitaplığının yüklü olduğundan emin olun.