Mostrando entradas con la etiqueta postgresql. Mostrar todas las entradas
Mostrando entradas con la etiqueta postgresql. Mostrar todas las entradas

viernes, 29 de abril de 2016

Base de datos Northwind en PostgreSQL

Esta es la versión portada a PostgreSQL de la popular base de datos de ejemplo Northwind que ofrece Microsoft en su sitio web


Te la puedes descargar de aqui:

https://drive.google.com/open?id=0B9uuluhrKpGKeHdLTHkxR1QzQXc

jueves, 21 de abril de 2016

PARSEDATETIME en PostgreSQL

SI al intentar ejecutar un SQL que tiene una conversión de String a Date ( timestamp por ejemplo) te salta el siguiente error:

"no existe la función parsedatetime(unknown, unknown)"

debes cambiar la funcion parsedatetime por to_date

Por ejemplo si tienes:

INSERT INTO usuario (ID, SOMEONE_DATE) 
VALUES (1, PARSEDATETIME('01-JAN-2016','dd-MMM-yyyy'));

por

INSERT INTO usuario (ID, SOMEONE_DATE) 
VALUES (1, TO_DATE('01-JAN-2016','dd-MMM-yyyy'));


miércoles, 13 de abril de 2016

Instalar versiones viejas de PostgreSQL en Debian

Por defecto si queremos instalar PostgreSQL en Debian se instalará la ultima versión (en este momento la 9.4). 

En mi caso deseo instalar la versión 9.1 por tener compatibilidad con postgis 1.5 (estoy trabajando en una base de datos antigua que solo soporta esa versión de postgis).

Para hacerlo se hace lo siguiente:
Primero debes crear un nuevo list que apunte a los repos de postgres

nano /etc/apt/sources.list.d/pgdg.list


denttro del fichero pgdg.list debes agregar la siguiente linea según la versión de debian que tengas:

Para debian 8 (jessie):
deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main


Para debian 7 (wheezy):
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main



Luego ejecutas 

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -




y por último

apt-get update


Ahora si puedes proceder a instalar postgres

apt-get install postgresql-9.1




http://www.postgresql.org/download/linux/debian/

lunes, 11 de abril de 2016

Hacer que PostgreSQL acepte conexiones externas

Si quieres conectarte a la base de datos de forma remota:
Debes modificar el fichero /var/lib/pgsql/data/postgresql.conf y colocar el campo listen_addresses como el siguiente:


listen_addresses = '*'

Luego agregar la siguiente linea al fichero  pg_hba.conf que normalmente se encuenta en /var/lib/pgsql/data/


host    all         all         IP_DEL_EQUIPO/24    trust
Donde IP_DEL_EQUIPO es la IP del servidor que corre PostgreSQL
Ejemplo


host    all         all         192.168.1.10/24    trust

domingo, 8 de febrero de 2015

Ejemplo Qt5 + Postgres

En la entrada anterior expliqué como se configuraba fedora para conectar qt5 con postgres. Ahora aquí se muestra un ejemplo de una aplicación en Qt que se conecta con una BD en postgres.

Primero creamos la BD de ejemplo desde pgadmin3. En este caso se llama BD_UNEG


CREATE DATABASE "BD_UNEG"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'es_VE.UTF-8'
       LC_CTYPE = 'es_VE.UTF-8'
       CONNECTION LIMIT = -1;
-- Table: persona

CREATE TABLE persona
(
  cedula character varying(20) NOT NULL,
  nombre character varying(50),
  tipo character varying(30),
  estatus character varying(30),
  carrera character varying(30),
  CONSTRAINT persona_pkey PRIMARY KEY (cedula)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE persona
  OWNER TO postgres;

qt postgres

Quedaría así


Ahora agrega algo a la BD. 



NOTA: En este ejemplo la clave de postgres es 123456 y el puerto es 5432

Este es el código en Qt que busca todos los elementos de la tabla persona y los muestra

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QStringList>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlRecord>

bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("127.0.0.1");   // Nombre del host
    db.setDatabaseName("BD_UNEG"); // Nombre de la BD
    db.setPort(5432);              // Puerto
    db.setUserName("postgres");    // Usuario
    db.setPassword("123456");      // Contraseña

    // Si esta abierto entonce retorna true
    if (db.isOpen()){
        qWarning() <<"La conexión ya estaba creada";
        return true;
    }

    // Abre la BD
    if (!db.open()) {
        QMessageBox::critical(0, QObject::tr("Database Error"),
                              db.lastError().text());
        return false;
    }
    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << (createConnection() ? "Se crea la conexión :)" : "ERROR al conectar :(");

    QSqlQuery qry;

    qry.prepare( "SELECT * FROM persona" );
     if( !qry.exec() )
       qDebug() << qry.lastError();
     else
     {
       qDebug( "Seleccionado!" );
       QSqlRecord rec = qry.record();
       int cols = rec.count();
       for( int c=0; c<cols; c++ )
         qDebug() << QString( "Columna %1: %2" ).arg( c ).arg( rec.fieldName(c) );

       for( int r=0; qry.next(); r++ )
         for( int c=0; c<cols; c++ )
           qDebug() << QString( "Fila %1, %2: %3" ).arg( r ).arg( rec.fieldName(c) ).arg( qry.value(c).toString() );
     }

    return a.exec();
}





Recuerda agregar QT += sql en el fichero .pro



Links de interes:
http://www.informit.com/articles/article.aspx?p=1405550


http://www.java2s.com/Code/Cpp/Qt/ConnecttoMySqlwithQSqlDatabaseanddoselectupdateinsertanddelete.htm


http://www.ics.com/designpatterns/solutions/qsqldatabase.html

Qt + Postgresql en Fedora 21

Para usar una bd en postgresql usando Qt en fedora 21 primero debes instalar el driver de postgresql

yum install qt5-qtbase-postgresql

Luego en el proyecto agregar la linea sql en el fichero .pro de nuestro proyecto



Listo :) Ahora puesdes probar el driver usando el siguiente código:



#include <QtCore/QCoreApplication>

#include <QDebug>
#include <QSqlDatabase>
#include <QStringList>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "Available drivers: " << QSqlDatabase::drivers();

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

    qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");

    return a.exec();
}



Aqui pongo un ejemplo más pulido:

Solucionar problema "la autentificación password falló para el usuario postgres" SOLUCIÓN DEFINITIVA

Esta es una solución definitiva hecha con arrechera porque estos hijos de la mil puta hacen que perdamos tiempo modificando la maldita contraseña y buscando como arreglar este maldito problema:

Primero cambiar la clave del usuario postgres

passwd postgres
(luego introducimos la clave)


Luego debes comentar con # todas las entradas de 
/var/lib/pgsql/data/pg_hba.conf y añadir al final 

#TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
# "local" is for Unix domain socket connections only
local   all             all                                    ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                md5




Así quedó en mi terminal:



Luego reiniciar el servicio de postgres


service postgresql-9.4 restart

luego ejecutar
su postgres

psql
y luego
ALTER USER postgres WITH PASSWORD 'NuevaClave';

A la final debes volver a borrar lo que agregaste al fichero 
/var/lib/pgsql/data/pg_hba.conf y dejarlo como estaba al inicio.

domingo, 16 de marzo de 2014

Generar diagramas ER para postgresql con SchemaSpy

Antes de empezar primero debemos tener instalado graphviz y java (opendjk o el de oracle).


Para instalar graphviz en ubuntu o debian prueba con: sudo apt-get install graphviz

1- Luego de tener java y graphviz instalado entonces nos descargamhos este fichero ya preparado que tiene el driver de postgres 9.3 para java y el programa que genera los diagramas (SchemaSpy).

Si tienes una versión distinta de postgres entonces debes descargar el driver adecuado desde este sitio y substituir dicho fichero .jar por driver.jar



2- Lo descomprimimos en un directorio y ejecutamos en el:

java -jar schemaSpy -t pgsql -cp ./driver.jar -db NOMBREDB -host HOST -port PUERTO -u USUARIO -p CONTRASEÑA -o DESTINO -schemas "public,something,else"

Donde:
 ./driver.jar: Es el nombre del driver de JDBC para postgres

NOMBREDB: Es el nombre de la base de datos

HOST: Es el host de la base de datos

* PUERTO: Es el puerto de la BD

USUARIO: Es el usuario de la BD

* CONTRASEÑA: El pass de la BD

* DESTINO: Es donde queremos ubicar los ficheros que se van a generar (diagramas, etc)

Por ejemplo:


java -jar schemaSpy -t pgsql -cp ./driver.jar -db 'tienda_virtual' -host 'localhost' -port '5432' -u 'postgres' -p '1234' -o destino -schemas "public,something,else"


Debería arrojar algo como esto:






En la carpeta de destino estará la documentación generada.



Un gráfico generado: