Gondoltam gyorsan importálok PostgreSQL 8.2.9-es adatbázisba CSV fájlokat.
COPY cel FROM '/eleris/ut/adat.csv'
Na ez nem jött össze :-(
A következőt hibát kaptam: extra data after last expected column
Több órám elment arra, hogy megoldjam de sehova se jutottam. A legjobb, hogy ha
COPY forras TO '/eleris/ut/kimenet.csv'
paranccsal készíttek cvs fájlt egy meglévő táblából, és azt megpróbálom beolvasni arra is ugyanezt a hibát kapom.
Nem értek nagyon az adatbázisokhoz, de ennyire buta nem lehetek. Van valakinek ötlete mi lehet a hiba?
OS: FreeBSD 6.3
- 1169 megtekintés
Hozzászólások
A hiba amiatt van, hogy a postgresql-nek nem felel meg a CSV formátuma.
Lehet, hogy van benne vmi extra TAB, vagy SPACE.
Hogyan keletkeztek a CSV fájlok?
CSV-ből akkor szoktunk COPY-val adatokat másolni postgresql táblákba, ha postgresql-ből másoltuk ki őket. Ha csinálsz a pg_dump-pal (with data) backupot az adatbázisodról és nem kéred SQL-ben az INSERTEKET, akkor is COPY-t fog használni. Backupolásra én mindig azt használom, hogy SQL-ben legyenek meg az insertek, mert így látható, hogy hol van az esetleges hiba.
A COPY-nak meg lehet mondani, hogy WITH SEPARATOR, azzal tudod megmondani, hogy mi legyen a mezőhatár, az adatokban lévő SEPARATOROKAT pedig escapeolnod kell, hogy jó legyen a mezők száma.
--
Ami elől menekülnek, az után szaladnak.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a választ de igazából én is eddig jutottam.
Az eredeti CSV-k OOo táblázatokból készültek. De nem csak azokat nem olvassa be, hanem a próbaképpen saját maga által gyártott táblát se. Mindkét esetben az 1. sort jelöli meg a hiba helyének. Az említett sorok:
Eredeti:
"1. sz. választókerület"|5|52659|4636|17563|12423|18037|23344|2480|8884|5402|6578|29315|2156|8679|7021|11459|76|15|60|389|63|17|46|265|87|14|73|531|27541|9993|5621|865|780|10082|200|13951|4116|5163|809|200|3663||190|88|5|66|31|256|122|6|71|58|48023|14005|20013|7483|6522|6122|20864|7164|10072|1489|2139|3036|27159|6841|9941|5994|4383|3086|6516|4140|2106|1499|465|70|64|656|128|222|233|73|138|230|129||101||88|1490|897|438|80|75|55|9941|1625|4137|3107|1072|13999|141|3935|705|2089|796|345|4836|123|6006|920|2048|2311|727|9163|153|27541|13693|13435|11779|1656|258|13848|12253|1595|12253|9440|3069|2170|355|254|3179|5626|10447|4880|320|1972|1117|49819|3000|5073|926|907|2437|14688|2601|20187|46819|97,5|37476|79,6|19793|46,5|27488|906|6435|12670|3917|3560|69|36|870|5520|7461|4543|3039|6055|44|23|26310|1109|69||27488|27488||27056|27256|232|27388|26373|17816|99|17329|9245|508||406|14966|3062|7480|1021|805|154|31943|29718|21794|7924|2225|1752|473|5535|12971|9758|3679|27488|244|191|78|22718|4337|433|27488|11474|9252|2982|2348|733|2536|5447|10419|4978|320|1919|1170|12969|258|13016|496|50|699|27159|10251|8647|6532|1729|27398|101|11375|6811|2829|1314|421|6840|60|15784|3440|5818|5218|1308|20558|130
A próba:
1 A test product 12.00
Természetesen az eredetinél beállítottam a mezőhatárolot |-ra:
COPY cel FROM '/elersi/ut/fajl.csv' WITH DELIMITER '|';
Piszkálja a csőröm mi a hiba, de azt is szívesen fogadom ha valaki tud más módszert OpenOffice-ból való táblázatok importálásra.
- A hozzászóláshoz be kell jelentkezni
Semmi ötlet?
- A hozzászóláshoz be kell jelentkezni
sed|perl + INSERT INTO ...
- A hozzászóláshoz be kell jelentkezni
nekem tokeletesen mukodik.
en inkabb azt szoktam csinalni, hogy a exportalt allomanyt megszerkesztem.
exportkor legyen tab az elvalaszto, es nem kell aposztrof a szoveghez.
export utan szerkesztes. es fejlecmezo (tipikusan elso sor) torlese.
ami fontos, hogy pontosan annyi oszlopnak kell lenni a db tablajaban, mint a file-ban. na meg ott kell lennie a szovegnek/szamoknak/stb ahol a txt file-ban.
a null -okkal is foglalkozni kell, mert azt az export nem igazan kezeli le jol. ott \N -nek kell lennie, hogy a copy tudja.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget.
Az volt a hiba, hogy nem egyezett az oszlopszám.
- A hozzászóláshoz be kell jelentkezni