2016-04-08 10 views
6

私はプログラム的にPythonとpsycopgを使ってPostgreSQLのテーブルにデータを追加しています。これはうまくいきます。「どのような列がタイプ文字の可変長で長すぎますか」に関係する列を判別する方法はありますか?

は時折しかし、テキスト値が含まれる列のためには長すぎるので、私はメッセージを取得:

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

数は、問題の列の幅です。

のエラーが発生しましたか? (各列の長さを比較して1000であるかどうかは別として)

+0

は、クエリとあなたのDDL – frlan

+0

を確認した場合、文字フィールドを識別し、切り捨てるようにスキーマ定義を使用します@しかし、それは既存のテーブルの場合に役立ちますか?すでに100個のレコードを挿入していて、101を記録すると、INSERTステートメントのどの部分が長すぎるかをどのように知ることができますか? –

答えて

1

@Tometzkyのおかげで多くの感謝の言葉を頂きました。

よりもむしろ後に事実を問題の原因となったコラムを決定しようと、私は値をデータベースに挿入するを切り捨てられたことを確認するために私のPythonスクリプトを修正。

  1. アクセスINSERTステートメントを構築するときにselect column_name, data_type, character_maximum_length from information_schema.columns where table_name='test'

  2. を使用して、テーブルのスキーマは、必要に応じて

1

私は簡単な方法はないと思う。

私はこれが助けるが、残念ながらないだろうと想定ように私は(9.4に)、psqlで冗長性を設定しようとしました:

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 

これはyou are not the only one with this problemとして、メーリングリストでの議論を正当なものであるかもしれません。

+0

プログラムでスキーマ定義を取得する方法があるかどうか知っていますか?そのようにして、各列の制限を事前に知っているので、手動で最大長に切り捨てることができます –

+1

'info_schema.columnsからtable_schema = 'pg_temp_2'、table_name = 'test'、table_column = 't' ; ' – Tometzky

+0

多くのおかげで、あなたのコメントは私に必要な情報をくれました –

関連する問題