Toon posts:

[pgSQL] veranderen datatype

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor zover ik heb kunnen vinden is de enige manier om het datatype van een column in PostgreSQL "aan te passen", de column droppen en een nieuwe aanmaken. Dit levert natuurlijk gezeur op met de data.

Klopt het dat het datatype van columns in postgreSQL tables niet veranderd kan worden?

[ Voor 5% gewijzigd door Verwijderd op 02-06-2005 12:43 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Even in de handleiding zoeken lijkt me ;)
De CHANGE bij een alter table is geen standaard SQL (het is een o.a. MySQL extension).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Nee dat klopt niet. Zie ALTER TABLE in de handleiding.

Verwijderd

Topicstarter
ALTER TABLE in de documentatie geeft de volgende opties
  • Add columns,
  • Remove columns,
  • Add constraints,
  • Remove constraints,
  • Change default values,
  • Rename columns,
  • Rename tables.
ref: http://www.postgresql.org...nteractive/ddl-alter.html

hier staat geen commando om het datatype aan te passen m.i.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Sorry, mijn kristallen bol is kapot en dus had ik wat moeite om te raden dat je een oude versie gebruikt. Denk je nou zelf ook niet dat dat relevante informatie is die je zou kunnen vermelden?

Officieel kan het niet. Onofficieel is de vraag welke conversie je wil doen en of je bereid bent om de system catalogs zelf aan te passen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

8.0 kan het wel, dus welke versie heb je? In 7.4 kan je de systeem tabellen aanpassen of een nieuwe tabel van het goede formaat maken en daar de data naar toe kopieren met een insert into ... select-statement.

[ Voor 68% gewijzigd door ACM op 02-06-2005 12:59 ]


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Note that pg does not support changing the type of a column. Instead, use something like the code below to change, say, a varchar(32) into varchar(64) (assuming the collumn is called abc):

BEGIN;
ALTER TABLE mytable ADD COLUMN abc_new varchar(64);
UPDATE mytable SET abc_new = abc;
ALTER TABLE mytable RENAME abc TO abc_old;
ALTER TABLE mytable RENAME abc_new TO abc;
COMMIT;
Het is wel te doen. :)

edit.. voor versie 7.4 inderdaad. :)

[ Voor 5% gewijzigd door RedRose op 02-06-2005 13:00 ]

Sundown Circus


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Goede antwoord, verkeerde voorbeeld :)
Het veranderen van een varchar(32) in een varchar(64) kan door in de system catalogs de lengte van het veld in de definitie aan te passen. Dat reduceert alles tot één simpele query:
code:
1
2
3
4
5
6
7
UPDATE
  pg_attribute
SET
  atttypmod = 64 + 4
WHERE
  attrelid = ( SELECT oid FROM pg_class WHERE relname = 'mytable' )
  AND attname = 'abc' ;

Voordeel hiervan is dat al je indexen en constraints gewoon blijven werken. Voor welke aanpassingen dit mogelijk is hangt af van de binaire representatie van het datatype.
Pagina: 1