PFZ.nl - PHP Community: ALTER ENUM TYPE (postgresql) - Databases - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 03-02-2012 09:35
  • Tjibbe
  • Groep: Forumleden
  • Posts: 47
  • Actief sinds: 21-12-2003
Ik heb het volgende TYPE:
CREATE TYPE rekening_type AS ENUM ('factuur','herinnering');


Dit wil ik graag veranderen in:
CREATE TYPE rekening_type AS ENUM ('debetfactuur','herinnering','creditfactuur');


Hoe kan ik dit doen?

Zonder de afhankelijke tabellen en views te verwijderen

#2 03-02-2012 10:13
Een nieuw type aanmaken, in alle tabellen een nieuwe kolom aanmaken van dat type, de data overzetten (je moet dan factuur wel uitsplitsen naar debet- en creditfactuur, natuurlijk) en dan de oude kolom + type verwijderen. Of laten staan: wie weet wil je er later nog iets mee.

De views zul je denk ik sowieso moeten vervangen. Een type kun je niet wijzigen: een type IS zijn waarden, en door het te wijzigen maak je dus een nieuw type aan.

[edit]
En vooraf natuurlijk backups maken, he, maar dat spreekt voor zich.

#3 03-02-2012 10:16

Quote

Hoe kan ik dit doen?
Niet. :-)

Je kunt een type niet veranderen als het in gebruik is, en je kunt de waarden van een enum niet aanpassen zolang ze in gebruik zijn.

Dit is "de" reden waarom je ENUM alleen gebruikt in situaties waarin het niet mogelijk is dat de opties veranderen, en dat is vrijwel nooit het geval.

Wat je kunt proberen is om een nieuw ENUM te maken met de juiste opties en dan de afhankelijke objecten aan te passen om de nieuwe ENUM te gaan gebruiken en dan de oude ENUM te droppen. Brrr.
DELETE FROM world WHERE dbms='mysql';
http://www.yapf.net - http://yapf.blogspot.com/

#4 03-02-2012 10:19
Oké, je kunt het dus theoretisch gezien aanpassen, maar zoals de TS al zegt is de ENUM in gebruik en geldt dus jouw laatste "aanbeveling", die precies hetzelfde is als mijn post ;) .

#5 03-02-2012 10:49
  • Tjibbe
  • Groep: Forumleden
  • Posts: 47
  • Actief sinds: 21-12-2003
Ik heb er spijt van dat ik ENUM heb gekozen. Volgende keer gewoon een extra tabel of een CHECK constraint.

#6 03-02-2012 11:11

Quote

Oké, je kunt het dus theoretisch gezien aanpassen, maar zoals de TS al zegt is de ENUM in gebruik en geldt dus jouw laatste "aanbeveling", die precies hetzelfde is als mijn post
Ik had jouw post nog niet gezien toen ik begon te tikken, mijn reply is geheel gericht op de TS.
DELETE FROM world WHERE dbms='mysql';
http://www.yapf.net - http://yapf.blogspot.com/

#7 03-02-2012 13:55
In de volgende versie van PostgreSQL word het mogelijk de lijst met waardes uit te breiden.

Dus niet zoals je bij MYSQL kan doen, waardes wijzigen terwijl ze in gebruik zijn :p
Persoonlijk gebruik voor een typen/status liever een integer dan tekst, deze zijn kleiner en niet taalafhankelijk.
"fouten verifieer je niet met een "; DROP DATABASE" commando. " Arnoud Engelfriet (Security.nl)

#8 05-02-2012 07:12
  • Jason
  • Groep: Forumleden
  • Posts: 445
  • Actief sinds: 12-03-2011

Bekijk Post Op 03-02-2012 13:55 schreef Sebastiaan Stok:

In de volgende versie van PostgreSQL word het mogelijk de lijst met waardes uit te breiden.
Dat kan sinds versie 9.1

Quote

ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } existing_enum_value ]
http://www.postgresq...-altertype.html

Wat niet wil zeggen dat je niet meer hoeft te normaliseren...


Inloggen wachtwoord vergeten? Aanmelden