2016-04-08 12 views
6

Programlı bir şekilde Python ve psycopg kullanarak bir PostgreSQL tablosuna veri ekliyorum - bu iyi çalışıyor.Hangi karakterin "tür karakterde değişiklik için çok uzun" ile ilişkilendirildiği nasıl belirlenir?

Bazen de, bir metin değeri ihtiva eden bir sütun için çok uzun olduğu, bu yüzden ileti almak:

ERROR: value too long for type character varying(1000)

sayısı soruna sütun genişliğidir.

değerini belirlemenin bir yolu, numaralı sütunun neden hatası verdi? (Her bir kolonun uzunluğunu, 1000 olup olmadığını görmek için karşılaştırmak dışında)

+0

Sorgunuzla ve DDL – frlan

+0

kontrol edin karakter alanlarını belirlemek ve kesecek şekilde şema tanımını kullanmak @ frlan mevcut bir tablo durumunda yardımcı olur mu? Zaten 100 kaydı başarıyla kaydettiğimi ve 101'in neden olduğunu kaydettiğimi söyleyeyim - INSERT ifademin hangi kısmının çok uzun olduğunu nasıl anlarım? –

cevap

1

Çok teşekkürler @Tometzky, kimin yorumları doğru yönde işaret etti.

Aksine gerçeği sonra sorunu neden olan sütun belirlemekten ziyade, ben değeri veritabanına takmadan önce kesildi sağlamak için benim Python komut dosyası değiştirilmiş.

  1. erişim INSERT deyimi oluştururken select column_name, data_type, character_maximum_length from information_schema.columns where table_name='test'

  2. kullanarak tablonun şema, gerekli

1

Kolay bir yol olduğunu düşünmüyorum. Ben (9,4 üzerine) Bu yardımcı olacağını farz, ama ne yazık ki değil

Ben psql'de Verbosity'ini ayarlamak çalıştı:

psql 
\set VERBOSITY verbose 
dbname=> create temporary table test (t varchar(5)); 
CREATE TABLE 
dbname=> insert into test values ('123456'); 
ERROR: 22001: value too long for type character varying(5) 
LOCATION: varchar, varchar.c:623 

Bu şey olabilir o posta listesindeki garanti tartışma, you are not the only one with this problem olarak.

+0

Şema tanımını programlı olarak almanın bir yolu var mı? Bu şekilde, her bir sütunun sınırlarını önceden bildiğimden, el ile onu maksimum uzunluğu olan –

+1

'karakter_maximum_length değerinden info_schema.columns arasından seçebilirim. Tablo_schema = 'pg_temp_2' ve table_name = 'test' ve table_column = 't' – Tometzky

+0

Çok teşekkürler, yorumunuz bana gerekli bilgileri verdi –

İlgili konular