![]() |
ENUM + AUTOINCREMET en Postgres Hola: Estoy mudando una base de datos de MySQL a Postgrest tengo una tabla que cuenta con un auto incremen pero este depende de otra columna que es de tipo ENUM y la columna auto imcrement se aunmenta segun el valor de la variable ENUM, aqui pongo un ejemplo en MySQL. CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ); INSERT INTO animals (grp,name) VALUES('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale '), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; Lo cual devuelve: +-------------+----+---------+ | grp | id | name | +-------------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+ |
Re: ENUM + AUTOINCREMET en Postgres ............. y??????? |
Re: ENUM + AUTOINCREMET en Postgres como puedo hacer que se autoincremente automaticamente dependiendo de la otra columna por que si pongo un serial normal autoincremente sin tomar en centa la otra columna |
Re: ENUM + AUTOINCREMET en Postgres Buenas, Puedes hacerlo con un trigger, tu insertas el grupo y el nombre y el trigger rellena el id. No utilizo MySql, pero dudo que haga esto de forma "trivial", como lo hacias en MySql? Un saludo |
Re: ENUM + AUTOINCREMET en Postgres ok muchas gracias |
Re: ENUM + AUTOINCREMET en Postgres Hola como andas. En postgres no existe el tipo ENUM, pero lo podemos simular muy facilmente: Código: Luego, para tomar los id que vos queres, deberias ejecutar una sentencia como al siguiente: Código: Saludos P/D: la funcion coalesce existe en la mayoria de los DB si no es en todos, y te devuelve el primer elemento no nulo de la serie que vos le pasas, en este caso el maximo id para el grupo X de la tabla animales y el numero 0. (ahora si, salu2) |
Re: ENUM + AUTOINCREMET en Postgres Cita:
Salu2 |
Re: ENUM + AUTOINCREMET en Postgres Efectivamente mi estimado seyko, y en la creacion de un dominio usaria una vez mas: CHECK (grp IN ('fish','mammal','bird')) Igualmente insisto en que postgres no posee como tipo nativo ENUM a diferencia del motor del cual proviene nuestro estimado zkroj, en el cual ademas de los DOMINIOS tambien encontramos como tipo nativo ENUM. Salu2 |
Re: ENUM + AUTOINCREMET en Postgres Cita:
y luego defines el campo: create table ... grp animal, ... no hace falta el check. Y si con un trigger rellena el id automaticamente, se quita tener que buscar el id en el insert: Código: INSERT INTO animals |
Re: ENUM + AUTOINCREMET en Postgres Hola, parece que me exprese suficientemente mal... Cuando dije: "Efectivamente mi estimado seyko, y en la creacion de un dominio usaria una vez mas: CHECK (grp IN ('fish','mammal','bird')) " me referia a algo asi como: CREATE DOMAIN animal AS VARCHAR(255) CHECK(VALUE IN ('fish','mammal','bird')); para la creacion del dominio, y como tu dices: CREATE TABLE animals ( grp animal NOT NULL, id INTEGER NOT NULL, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ); Saludos! |
Re: ENUM + AUTOINCREMET en Postgres ahhh vale yo tampoco lei muy bien ;) Salu2 |
| La zona horaria es GMT -6. Ahora son las 05:25. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.