viernes, 11 de noviembre de 2016

Postgres - INSERT en tabla con SECUENCIA definida

Ejemplo:

CREATE TABLE table (id int, nombre varchar);

CREATE SEQUENCE table_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 100
  CACHE 1;

ALTER TABLE table_id_seq
  OWNER TO postgres;

Insertando un registro:

INSERT INTO table (id, nombre) values (nextval('table_id_seq'), 'pio');

Si el campo id de table fue creado como tipo "serial" también inserta con default:

INSERT INTO table (id, nombre) values (default, 'pio');

Insertando registros desde otra tabla:

INSERT INTO table
   (SELECT nextval('table_id_seq'), nombre2 FROM table2)

Asignando nuevo valor de inicio (START):

SELECT setval('table_id_seq', 700);

EL siguiente 'nextval' será 701



lunes, 3 de octubre de 2016

vim / psql - asignar como editor por defecto

# Install vim and set as default editor
sudo apt-get install -y vim
sudo update-alternatives --set editor /usr/bin/vim.basic

UPDATE table FROM oooother table

Actualizando una tabla a partir de otra (Postgres)

update t2 set name = t1.name
from t1
where t1.k = t2.k

en el ejemplo el campo común k

Postgres - export/import en formato CSV


Export:

en windows:
COPY tablename(field_x, field_y, ..) to '\path\to\copy\file.csv' delimiters ',' csv header;

ó  (Encoding si dificultades con acentos y caracteres especiales)

COPY  tablename  
TO 'c:\path\to\copy\file.csv'
WITH (FORMAT csv, HEADER, ENCODING 'WIN1252' )

COPY (select field_x, field_y  from tablename where condition)
TO 'c:\path\to\copy\file.csv'
WITH (FORMAT csv, HEADER, ENCODING 'WIN1252' )


en linux:
COPY tablename(field_x, field_y, ..) TO '/path/to/copy/file.csv' delimiters ',' csv header;

Import (previamente se debe crear tabla con la estructura de campos requerida):

en linux:
\COPY tablename FROM ~/path/to/file.csv delimiter ',' csv header

Si errores en encoding:
\COPY tablename FROM ~/path/to/file.csv delimiter ',' csv header encoding 'WIN1252'

miércoles, 21 de septiembre de 2016

Postgres - Búsqueda con expresiones regulares

Encontrando caracteres 'extraños' en el 'campox' de 'tablax'

SELECT campox FROM tablax WHERE campo ~ '[^a-z^0-9^A-Z\(\)\sÑñÓáéíóú_.-]'

Update - corregir

UPDATE tablax SET campox=  REPLACE(campox, '¥', 'Ñ')  WHERE campox ~~ '%¥%'  

martes, 28 de junio de 2016

Backup de una tabla y Restore en otra bd

Backup en linux - ubuntu:

sudo -u postgres -i pg_dump -c -Fp -f /home/usr/baktables/tabla.sql  -d bdname -t tabla

Verificar que la asignación de dueño de la tabla sea a un usuario válido si se recuperará en otra bd.

Restore en Win:

Desde psql y en la bd que se quiera recuperar:

\i d:/ruta/de/backup/tabla.sql