2011-09-07 15 views
11

ho una tabella con il seguente schemaPostgreSQL: come risolvere "numerico troppo pieno campo" problema

COLUMN_NAME, ORDINAL_POSITION,...., NUMERIC_PRECISION_INTEGER
"year";1;"";"YES";"numeric";;;17;10;17 "month_num";2;"";"YES";"numeric";;;17;10;17 "month_name";3;"";"YES";"text";;1073741824;;;
"week_of_month";4;"";"YES";"numeric";;;17;10;17
"count_of_contracts";5;"";"YES";"bigint";;;64;2;0

ma quando inserisco il seguente in esso

insert into contract_fact values(2011, 8, 'Aug', 1, 367) 

vedo il seguente errore

ERROR: numeric field overflow
SQL state: 22003
Detail: A field with precision 17, scale 17 must round to an absolute value less than 1.

+3

Questo non è uno schema ma un dump di una tabella interna postgres. Se potessi avere la cortesia di produrre qualcosa di leggibile, come l'output di \ d o l'istruzione CREATE TABLE che è stata utilizzata per creare questa tabella (pgAdmin3 può aiutarti con questo)? Inoltre, un campo dichiarato numerico (X, Y) può utilizzare fino a X posti, con decimali Y direttamente alla virgola. Ciò significa che se X = Y è possibile memorizzare solo valori <1. –

+2

Inoltre, si prega di includere l'elenco di colonne nei propri INSERT, a seconda di un particolare ordine di colonne è una cattiva idea. –

risposta

46

Sembra che tu abbia le colonne year e week_of_month definite come numeric(17,17), che significa 17 cifre, 17 delle quali sono dietro il punto decimale. Quindi il valore deve essere compreso tra 0 e 1. Probabilmente intendevi lo numeric(17,0), o forse dovresti usare un tipo intero.

+10

+1, buona presa nonostante la formattazione caotica –

0

Ho avuto un problema simile anche senza aver impostato un limite superiore. Se questo accade a voi, si potrebbe desiderare di guardare ai limiti PostgreSQL globali qui: https://www.postgresql.org/docs/9.6/static/datatype-numeric.html

Per esempio TIMESTAMP sono una sorta di BIGINT con un limite di 9223372036854775807 così si potrebbe desiderare di verificare che l'intero vostro stanno passando in la tua query è inferiore a tale valore.

Problemi correlati