Aracılığıyla paylaş


Uzantıların ve modüllerin kullanımıyla ilgili dikkat edilmesi gerekenler

Bu makalede, PostgreSQL için Azure Veritabanı esnek sunucu örneğinde belirli uzantıları veya modülleri kullanırken dikkat etmeniz gereken bazı özel noktalar açıklanmaktadır.

Uzantılarla ilgili genel dikkat edilmesi gerekenler

PostgreSQL için Azure Veritabanı esnek sunucu örneğinizde bir uzantı kullanmak için şunları yapın:

PostgreSQL için Azure Veritabanı esnek sunucu örneğinizde , CREATE EXTENSIONALTER EXTENSION veya DROP EXTENSION komutlarını yürütürken COMMENT ON EXTENSIONherhangi bir hata alırsanız olası hataların listesine bakın ve bu hataların her birinin nedeni ne olabilir?

Modüllerle ilgili genel konular

PostgreSQL için Azure Veritabanı esnek sunucu örneğinizde bir modülü kullanmak için, bunu yalnızca shared_preload_libraries açıklandığı gibi sunucu parametresine eklemeniz gerekir.

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 Veritabanı esnek sunucu örneğinde 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
  • 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.

Uzantı, dblink bir PostgreSQL için Azure Veritabanı esnek sunucu örneğinden aynı sunucudaki başka bir veritabanına veya 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ğıtmanızı öneririz. 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

Uzantı, pg_buffercacheshared_buffers içeriğini incelemek için kullanılabilir. Bu uzantıyı kullanarak, belirli bir ilişkinin önbelleğe alınıp alınmadığını anlayabilirsiniz (içindeshared_buffers). Bu uzantı, performans sorunlarını (önbelleğe almayla ilgili performans sorunları) gidermenize yardımcı olabilir.

Bu uzantı PostgreSQL'in temel yüklemesiyle tümleştirilmiştir 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 tablonun düzenli aralıklı vakumlarını çalıştırabilir veya eski veri işlerini 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ıştırmanın ilk çalıştırma tamamlanmadan başlaması gerekiyorsa, ikinci çalıştırma kuyruğa alınır ve ilk çalıştırma tamamlanır tamamlanmaz başlatılır. Bu şekilde, işlerin zamanlandığı kadar çok kez çalışmasını ve kendileriyle eşzamanlı olarak çalışmamasını sağlar.

ayarlandığı shared_preload_libraries değerin değerini içerdiğinden pg_cronemin olun. Bu uzantı, CREATE EXTENSION komutunun yürütülmesi sonucunda kitaplığın yüklenmesini desteklemez. Uzantı öğesine eklenmediyse veya sunucu eklendikten shared_preload_librariessonra yeniden başlatılmadıysa CREATE EXTENSION'ı çalıştırma girişimi, metninde ifadesinin olduğu pg_cron can only be loaded via shared_preload_librariesve ipucunun olduğu bir hatayla sonuçlanır Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.

kullanmak pg_croniçin, paylaşılan kitaplığını sunucu başlatıldığında yüklediğinizden, izin verilenler listesinde 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. Vakumu her gün saat 10:00'da (GMT) varsayılan veritabanında postgresçalıştırmak için.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. 'den pg_crontüm görevleri zamanlanmamış olarak ayarlamak için.

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

    SELECT * FROM cron.job;
    
  5. Vakumu her gün saat 10:00'da (GMT) veritabanında test cron rol hesabı altında azure_pg_admin ç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'den başlayarak, ve işlevlerini kullanarak cron.schedule_in_databasecron.alter_job işinizi belirli bir veritabanında zamanlayabilir ve mevcut bir zamanlamayı güncelleştirebilirsiniz.

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

  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 SQL açıklamalarında "ipuçları" olarak adlandırılan şu şekilde postgreSQL yürütme planlarını ayarlamayı mümkün kı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. Okunabilirlik için yeni satırlar, her ipucu tümceciği sınırlandırabilir.

Example:

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

Önceki örnek, planlayıcının tabloyla seqscan tablo a olarak bbirleştirmek için tablodaki sonuçları hashjoin kullanmasına neden olur.

pg_hint_plan uzantısını kullanmak için, uzantıyı izin listesine eklediğinizden, kütüphanesini yüklediğinizden ve 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ırlamanız, sorgularınızın yeniden başlatma sonrasında ilk çalıştırmalarında daha iyi yanıt sürelerine sahip olduğu anlamına gelir. PostgreSQL için otomatik uyarı işlevselliği şu anda Azure Veritabanı'nda kullanılamaz.

pg_repack

Uzantının pg_repack ilk kullanıcıları genellikle şu soruyu sorar: Bir uzantı mı yoksa veya gibi pg_repack bir istemci tarafı yürütülebilir dosyası mı psqlpg_dump?

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ı, işaret edildiği veritabanında oluşturulan uzantı olmadan işe yaramaz. Kendi başına sunucu tarafı uzantısı tamamen işlevsel olacaktır, ancak kullanıcının karmaşık bir etkileşim desenini anlamasını gerektirir. Bu düzen, uzantı tarafından uygulanan işlevlere giriş olarak kullanılan verileri almak için sorguların yürütülmesinden vb. oluşur.

Şema yeniden paketleme için izin reddedildi

Şu anda, bu uzantı tarafından oluşturulan yeniden paketleme şemasına izinler sağladığımız için, yalnızca bağlamından pg_repackişlevselliği çalıştırmayı azure_pg_admin destekliyoruz.

olmayan bir tablonun azure_pg_adminsahibi çalıştırmayı pg_repackdenerse aşağıdaki hatayı aldığını 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 bağlamından azure_pg_adminpg_repack ç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 izlemenin bir aracı sağlamak için postgreSQL için Azure Veritabanı esnek sunucu örneklerine ö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 ve noneşeklindedirall. Bu ayar sunucu parametresi olarak yapılandırılabilir.

Uzantının her SQL deyimini günlüğe kaydederken sunucu performansında sağladığı sorgu yürütme bilgileri pg_stat_statements arasında bir denge vardır. Uzantıyı pg_stat_statements etkin bir şekilde kullanmıyorsanız olarak ayarlamanız pg_stat_statements.tracknoneönerilir. 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.

postgres_fdw

Uzantı, postgres_fdw bir PostgreSQL için Azure Veritabanı esnek sunucu örneğinden aynı sunucudaki başka bir veritabanına veya 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ğıtmanızı öneririz. 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

Uzantıyı pgstattuple kullanarak Postgres 11 ile 13 arasındaki sürümlerde şemada pg_toast tutulan nesnelerden tanımlama grubu istatistiklerini almaya çalışırken , "şema pg_toast için izin reddedildi" hatasını alıyorsunuz.

Şema pg_toast için izin reddedildi

PostgreSQL için Azure Veritabanında esnek sunucu örneği kullanan müşteriler, PostgreSQL sürüm 11, 12 veya 13 ile pgstattuple uzantısını pg_toast şeması içindeki nesnelerde kullanamaz.

PostgreSQL 16 ve 17'depg_read_all_data, rolüne otomatik olarak verilir ve azure_pg_admin düzgün çalışmasına izin verilirpgstattuple. PostgreSQL 14 ve 15'te müşteriler aynı sonucu elde etmek için pg_read_all_data rolü el ile verebilirazure_pg_admin. Ancak PostgreSQL 11 ile 13 pg_read_all_data arasında rol yoktur.

Müşteriler gerekli izinleri doğrudan veremiyor. Şema altındaki nesnelere erişmek için komutunu çalıştırabilmeniz pgstattuple gerekiyorsa, bir Azure desteği isteğipg_toast.

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 SELECT timescaledb_post_restore() timescaledb.restoreing bayrağını güncelleştirirken izinlerin reddedilmesine neden olabilirsiniz. Bu hatayı alma nedeniniz, Cloud PaaS veritabanı hizmetlerinde sınırlı ALTER DATABASE izni olmasıdır. Bu durumda, Zaman Ölçeği veritabanını yedeklemek ve geri yüklemek için aracı kullanarak timescaledb-backup alternatif bir yöntem gerçekleştirebilirsiniz. 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. Esnek sunucu örneği ve veritabanı PostgreSQL için Azure Veritabanı bir hedef 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 Veritabanı, kullanıcıdan sadece basit bir etkileşimle PostgreSQL için Azure Veritabanı esnek sunucu örneğinde yerinde ana sürüm yükseltmesi gerçekleştiren bir yerinde 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, orafce, postgres_fdw ve timescaledb uzantıları, yerinde ana sürüm güncelleştirme özelliği kullanılırken, Azure Veritabanı for PostgreSQL esnek sunucu örneği sürümlerinin hiçbirinde desteklenmez.

Dikkat edilmesi gereken belirli noktalara sahip modüller

Aşağıdaki liste, PostgreSQL için Azure Veritabanı esnek sunucu örneğinde 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. Yük devretme sonrasında mantıksal çoğaltma yuvalarını korumayan standart PostgreSQL altyapısındaki sınamayı etkili bir şekilde ele alır. 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.

Modülü pg_failover_slots kullanmak için, sunucu başlatıldığında kitaplığının yüklendiğinden emin olun.