Restricting the value of columns in PostgreSQL

ENUM
--Enum type
 --case sensitive
 --4 Bytes on disk
 CREATE TYPE vaildcolor AS ENUM ('Blue','Pink');

REGEXP

--Case insensitivie regexp
 --accepts NULL
 --useful for complex/long text matching
 ALTER TABLE color ADD CONSTRAINT
 vaild_color CHECK(
 color ~*
 '^(blue|pink)$'
 );

CHECK

 --Case sensitivie =
 --accepts NULL
 ALTER TABLE color ADD CONSTRAINT
 vaild_color CHECK(
 color = 'Blue' OR color = 'Pink'
 );
Advertisements

Registros repetidos

Algunos queries útiles para lidiar con con registros repetidos.

Encuentra lor registros repetidos junto con el número de veces que están repetidos.

SELECT DISTINCT(column_id), count(column_id)
    FROM table_name
    GROUP BY column_id
    HAVING (count(column_id)>1)

Para borrar los repetidos:

DELETE FROM table_name where rowid NOT IN
 (SELECT max(rowid) FROM table GROUP BY duplicate_values_field_name);

Una alternativa para borrar

DELETE  duplicate_values_field_name dv FROM table_name ta 
WHERE rowid <(SELECT min(rowid)  FROM table_name tb 
WHERE ta.dv=tb.dv);

Crear tablas desde otra BD en Oracle en 3 sencillos pasos

Es útil cuando tienes acceso a una base de datos externa (EXTERNAL) con permisos restringidos y quieres importar esos datos a otra base de datos.

  1. Agregar la descripción a tnsnames.ora
    EXTERNAL =
    (DESCRIPTION =(LOAD_BALANCE=yes) (ADDRESS = (PROTOCOL = TCP)(HOST = externalserver1.com)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = externalserver2.com)(PORT = 1521)) (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = EXDB)))
  2. Crear en nuestar base de datos un link a la base de datos externa
    create public database link
     EXTERNAL_link
    connect to
     EXTERNAL_user
    identified by
     EXTERNAL_pass
    using 'EXTERNAL'
    
  3. Crear la tabla que nos interesa
    create table mi_tabla as
    select * from external_table@EXTERNAL_link