Aracılığıyla paylaş


PostgreSQL'den PostgreSQL için Azure Veritabanı'na çevrimiçi geçişlerle ilgili bilinen sorunlar/sınırlamalar

Önemli

Daha kolay ve verimli bir geçiş deneyimi için yeni geçiş hizmetinin PostgreSQL için Azure Veritabanı'de kullanılması önerilir. Bu hizmet, çeşitli kaynak ortamları destekleyerek süreci basitleştirir ve PostgreSQL için Azure Veritabanı sorunsuz bir geçiş sağlar.

PostgreSQL'den PostgreSQL için Azure Veritabanı çevrimiçi geçişlerle ilgili bilinen sorunlar ve sınırlamalar aşağıdaki bölümlerde açıklanmıştır.

Çevrimiçi geçiş yapılandırması

  • Kaynak PostgreSQL sunucusu, 9.4, 9.5, 9.6, 10 veya 11 sürümünü çalıştırıyor olmalıdır. Daha fazla bilgi için, bkz. Desteklenen PostgreSQL Veritabanı Sürümleri.

  • Yalnızca aynı veya daha yüksek sürüme geçişler desteklenir. Örneğin, PostgreSQL 9.5'i PostgreSQL için Azure Veritabanı 9.6 veya 10'a geçirme desteklenir. PostgreSQL 11'den PostgreSQL 9.6'ya geçiş desteklenmez.

  • PostgreSQL postgresql.conf dosyasında mantıksal çoğaltmayı etkinleştirmek için aşağıdaki parametreleri ayarlayın:

    • wal_level: Mantıksal olarak ayarlayın.
    • max_replication_slots: Geçiş için en az maksimum veritabanı sayısını ayarlayın. 4 veritabanını geçirmek istiyorsanız, değeri en az dört olarak ayarlayın.
    • max_wal_senders: Eşzamanlı olarak çalışan veritabanı sayısını ayarlayın. Önerilen değer 10'dur.
  • Kaynak PostgreSQL pg_hba.conf'a DMS aracısı IP'sini ekleyin.

    1. Azure Veritabanı Geçiş Hizmeti örneğini hazırlama işlemini tamamladıktan sonra DMS IP adresini not edin.

    2. IP adresini pg_hba.conf dosyasına ekleyin:

          host    all    172.16.136.18/10    md5
          host    replication postgres    172.16.136.18/10     md5
      
  • Kullanıcının, kaynak veritabanını barındıran sunucuda ÇOĞALTMA rolüne sahip olması gerekir.

  • Kaynak ve hedef veritabanı şemaları eşleşmelidir.

Boyut sınırlamaları

  • Tek bir DMS hizmeti kullanarak PostgreSQL'den PostgreSQL için Azure Veritabanı'na en fazla 1 TB veri geçirebilirsiniz.
  • DMS, kullanıcıların geçirmek istedikleri veritabanının içindeki tabloları seçmesine olanak tanır. Tablo seçme seçeneğini gösteren D M S ekranının ekran görüntüsü.

Arka planda, aşağıdaki seçeneklerden birini kullanarak seçili tabloların dökümünü almak için kullanılan bir pg_dump komutu vardır:

  • Kullanıcı arabiriminde seçilen tablo adlarını eklemek için -T
  • -t kullanıcı tarafından seçilmeyen tablo adlarını dışlamak için

-t veya -T seçeneğinden sonra pg_dump komutuna dahil edilebilecek en fazla 7500 karakter sınırı vardır. pg_dump komutu, seçili veya seçilmemiş tablolar için karakter sayısını (hangisi daha düşükse) kullanır. Seçili ve seçilmemiş tablolar için karakter sayısı 7.500'ü aşarsa, pg_dump komutu bir hatayla başarısız olur.

Önceki örnekte pg_dump komutu şöyle olacaktır:

pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""

Önceki komutta karakter sayısı 55'tir (çift tırnak, boşluk, -T ve eğik çizgi içerir)

Veri türü sınırlamaları

Sınırlama: Tablolarda birincil anahtar yoksa, değişiklikler, hedef veritabanıyla eşitlenmeyebilir.

Geçici çözüm: Geçişin devam etmesi için, tablonun birincil anahtarını geçici olarak ayarlayın. Veri geçişi tamamlandıktan sonra birincil anahtarı kaldırın.

AWS RDS PostgreSQL'den çevrimiçi geçişle ilgili sınırlamalar

Amazon Web Service (AWS) İlişkisel Veritabanı (RDS) PostgreSQL'den PostgreSQL için Azure Veritabanı'na çevrimiçi geçiş gerçekleştirmeye çalıştığınızda aşağıdaki hatalarla karşılaşabilirsiniz:

  • Hata: '{database}' veritabanındaki '{table}' tablosundaki '{column}' sütununun varsayılan değeri kaynak ve hedef sunucularda farklı. Değer kaynakta '{value on source}', hedefte ise '{value on target}'.

    Sınırlama: Bu hata, sütun şemasındaki varsayılan değer kaynak ve hedef veritabanları arasında farklılık gösterdiğinde oluşur.

    Geçici çözüm: Hedef şemanın kaynak şemayla eşleştiğinden emin olun. Şemayı geçirme hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı çevrimiçi geçiş belgeleri.

  • Hata: '{database}' hedef veritabanında '{number of tables}' tabloları bulunurken, '{database}' kaynak veritabanında '{number of tables}' tabloları var. Kaynak ve hedef veritabanlarındaki tablo sayısı aynı olmalıdır.

    Sınırlama: Bu hata, tablo sayısı kaynak ve hedef veritabanları arasında farklılık gösterdiğinde oluşur.

    Geçici çözüm: Hedef şemanın kaynak şemayla eşleştiğinden emin olun. Şemayı geçirme hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı çevrimiçi geçiş belgeleri.

  • Hata: {database} kaynak veritabanı boş.

    Sınırlama: Bu hata, kaynak veritabanı boş olduğunda oluşur. Büyük olasılıkla kaynak olarak yanlış veritabanını seçmişsinizdir.

    Geçici çözüm: Geçiş için seçtiğiniz kaynak veritabanını bir kez daha denetleyin ve yeniden deneyin.

  • Hata: {database} hedef veritabanı boş. Şemayı geçirin.

    Sınırlama: Bu hata, hedef veritabanında şema olmadığında oluşur. Hedefteki şemanın kaynaktaki şemayla eşleştiğinden emin olun.

    Geçici çözüm: Hedef şemanın kaynak şemayla eşleştiğinden emin olun. Şemayı geçirme hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı çevrimiçi geçiş belgeleri.

Diğer sınırlamalar

  • Veritabanı adı noktalı virgül (;) içeremez.
  • Yakalanan bir tablonun birincil anahtarı olmalıdır. Tabloda birincil anahtar yoksa SİLME ve GÜNCELLEME kayıt işlemlerinin sonucu tahmin edilemez.
  • Birincil anahtar kesiminin güncelleştirilmesi yoksayılır. Böyle bir güncelleştirmenin uygulanması, hedef tarafından hiçbir satırı güncelleştirmemiş bir güncelleştirme olarak tanımlanır. Sonuç, özel durumlar tablosuna yazılmış bir kayıttır.
  • Tablonuzda bir JSON sütunu varsa bu tablodaki tüm SİLME veya GÜNCELLEME işlemleri başarısız bir geçişe yol açabilir.
  • Aynı ada ancak farklı duruma sahip birden çok tablonun geçirilmesi öngörülemeyen davranışlara neden olabilir ve desteklenmez. table1, TABLE1 ve Table1 kullanımı buna bir örnektir.
  • [CREATE | ALTER | DROP | TRUNCATE] tablo DDL'lerinde değişiklik işlemi desteklenmez.
  • Veritabanı Geçiş Hizmeti tek bir geçiş etkinliği en fazla dört veritabanını barındırabilir.
  • pg_largeobject tablosunun geçişi desteklenmez.