viernes, 23 de octubre de 2015

Cambiar tipo de dato PostgreSQL

Creando una base de datos he hecho esto:

create table departamentos
(idDepartamento serial,
codigo integer,
nombre varchar(50),
primary key (idDepartamento));

create table municipios
(idMunicipio serial,
codigo integer,
nombre varchar(50),
idDepartamento integer references departamentos(idDepartamento),
primary key (idMunicipio));

Pero me equivoque al dejar como integer el campo codigo de cada una de las tablas, para cambiar este tipo de dato podemos hacerlo así:

alter table departamentos alter column codigo type varchar(3);
alter table municipios alter column codigo type varchar(3);

domingo, 18 de octubre de 2015

Insertar valores integer en Postgresql con Codeigniter

Este es mi código de la función en el controlador que trabaja con los usuarios de una tabla de Postgresql.

function agregar_usuarios() {       
        $datos_insertar=$this->input->post();
        unset($datos_insertar['btn_enviar']); 
        $this->db->insert('contactos', $datos_insertar );
        return $this->db->insert_id();
    }

La tabla usuarios tiene la siguiente estructura:


Como pueden observar, los campos de edad y status son integer y en con la función agregar_usuarios(); me esta arrojando un error al hacerlo.

La solución es muy sencilla y es esta:

function agregar_usuarios() {       
        $datos_insertar=$this->input->post();
        unset($datos_insertar['btn_enviar']); 
        settype($datos_insertar['edad'],'integer');        settype($datos_insertar['status'], 'integer');
        $this->db->insert('contactos', $datos_insertar );
        return $this->db->insert_id();
    }

Establecer los datos como integer con la función settype() de PHP.

Como pueden observar, se esta haciendo un retorno del id insertado en la tabla contactos, pero aquí viene el otro lío que encontré al hacerlo.

  

Como pueden observar es un error con carácter "Warning" a pesar de que esta haciendo la inserción en la tabla normalmente.

La solución para la versión 2.2.4 de Codeigniter esta en el archivo:

\proyecto\system\database\drivers\postgre\postgre_driver.php

Solo coloquen la linea número 332 dentro de la function insert_id() en comentario, esto es:


 Y solucionado ...