Cosa significa "Lunghezza totale delle colonne nel vincolo è troppo lungo" in Informix?
Domanda
Ottengo che la lunghezza totale delle colonne nel vincolo sia troppo lunga. errore dal seguente
sql] Failed to execute: CREATE TABLE GTW_WORKFLOW_MON ( WORKFLOW_NAME VARCHAR(255) NOT
NULL, WORKFLOW_LOADED NUMERIC(20) NOT NULL, ACTIVITY_NAME VARCHAR(255) NOT NULL, FLAGS
INTEGER NOT NULL, MONITOR_NAME VARCHAR(255) NOT NULL, CLASSNAME VARCHAR(255) NOT NULL, S
TR0 VARCHAR(255), STR1 VARCHAR(255), STR2 VARCHAR(255), NUM0 VARCHAR(255), NUM1
VARCHAR(255), NUM2 VARCHAR(255), DATE0 VARCHAR(255), DATE1 VARCHAR(255), DATE2
VARCHAR(255), PRIMARY KEY (WORKFLOW_NAME,WORKFLOW_LOADED,ACTIVITY_NAME,MONITOR_NAME) )
[sql] java.sql.SQLException: Total length of columns in constraint is too long.
Soluzione
Il tuo vincolo chiave primaria è 785 byte (255 + 20 + 255 + 255). Se aumenti le dimensioni della pagina del tuo database a 4K, dovrebbe funzionare a malapena. Dovresti anche riconsiderare se hai bisogno che le tue colonne siano larghe quanto le stai definendo.
Ho trovato un gruppo di discussione in cui un ingegnere, Radhika Gadde, descrive che la dimensione massima dell'indice è correlata alla dimensione della pagina. Dice:
quale errore viene visualizzato durante la creazione di tabelle. La lunghezza massima della chiave indice può essere calcolata come segue:
[(PAGESIZE -93) / 5] -1
come per 2k lo è [(2048-93) / 5] -1 = [1955/5] -1 = 391-1 = 390
se PAGESIZE è 4K è [(4096-93) / 5] -1 = 4003 / 5-1 = 800-1 = 799
Altri suggerimenti
La risposta sopra è completa. Ma ho pensato di aggiungere alcuni link utili nel caso qualcuno corre di nuovo a questo problema. Il formato delle pagine su Informix dipende dal sistema operativo. Sulla mia recente esperienza, ho scoperto che è 4K su Win 2008, OSX - Lion e 2K su SUSE EL4. Puoi trovare le dimensioni della pagina usando 'onstat -D'.
Ho scritto http: // sumedha. blogspot.com/2013/03/how-to-increase-informix-page-size.html con questa esperienza. Anche il seguente collegamento alla documentazione di IBM è molto utile.