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

martes, 27 de mayo de 2014

Script migración tablas sueltas

Script de apoyo para mover el contenido una serie de tablas de una base de datos a otra.
Toma el contenido de las tablas tabla1..tabla4 y lo vuelca en /tmp/fichero.dump sin tomar la estructura de la tabla.
Utiliza unas tablas auxiliares para guardar el contenido de las tablas que tienen relaciones con tabla1..tabla4.
Vacía las tablas tabla2_related1..tabla2_related3 con relaciones sobre las tablas que estamos moviendo.
Posteriormente vacía las tablas destino tabla1..tabla4 y despues las rellena con el contenido del fichero /tmp/fichero.dump
Por último restaura el contenido de las tablas con relaciones, utilizando la cópia almacenada en las tablas auxiliares.
Espero que os pueda servir de ayuda en alguna ocasión.


#Volcado de las tablas originales deseadas (primero las maestras luego las dependientes)
pg_dump -U -h -p --inserts --data-only -t tabla1  >  /tmp/fichero.dump
pg_dump -U -h -p --inserts --data-only -t tabla2 >> /tmp/fichero.dump
pg_dump -U -h -p --inserts --data-only -t tabla3 >> /tmp/fichero.dump
pg_dump -U -h -p --inserts --data-only -t tabla4 >> /tmp/fichero.dump

#Borrado de las auxiliares
psql -h -U -p -c "drop table schema.aux_tabla2_related1"
psql -h -U -p -c "drop table schema.aux_tabla2_related2"
psql -h -U -p -c "drop table schema.aux_tabla2_related3"

#Relleno de las auxiliares
psql -h -U -p -c "create table schema.aux_tabla2_related1 as select * from schema.tabla2_related1"
psql -h -U -p -c "create table schema.aux_tabla2_related2 as select * from schema.tabla2_related2"
psql -h -U -p -c "create table schema.aux_tabla2_related3 as select * from schema.tabla2_related3"

#Borrado de las relacionadas
psql -h -U -p -c "delete from schema.tabla2_related1"
psql -h -U -p -c "delete from schema.tabla2_related2"
psql -h -U -p -c "delete from schema.tabla2_related3"

#Borramos el contenido de las tablas deseadas
psql -h -U -p -c "delete from schema.dictionary"
psql -h -U -p -c "delete from schema.tabla4"
psql -h -U -p -c "delete from schema.tabla2"
psql -h -U -p -c "delete from schema.tabla1"

#Rellenamos las tablas deseadas
psql -h -U -p <  /tmp/fichero.dump
#Restauramos las relacionadas
psql -h -U -p -c "insert into schema.tabla2_related1 select * from schema.aux_tabla2_related1"
psql -h -U -p -c "insert into schema.tabla2_related2 select * from schema.aux_tabla2_related2"
psql -h -U -p -c "insert into schema.tabla2_related3 select * from schema.aux_tabla2_related3"


viernes, 28 de septiembre de 2012

curl script

Si necesitas hacer repetidas llamadas curl via script Linux:

curl -S -w "%{url_effective}\n" -L "http://dominio.com:7080/api/pepe.php?apikey=56de&parametro1=390&parametro2=elquesea"

martes, 28 de agosto de 2012

Reemplazar cadena en ficheros recursivamente

Busca a partir del directorio, recursivamente en todos los ficheros y cambia "lo_que_busco" por "lo_cambio_por_esto":

for i in `grep -l -R "lo_que_busco" ./directorio`; do sed 's/lo_que_busco/lo_cambio_por_esto/g' -i $i; done;

Trucos ssh

Conexión sin contraseña a un servidor ssh:


En el servidor origen de la conexión:


$ ssh-keygen -t rsa


El contenido del fichero resultante ~/.ssh/id_rsa.pub, hay que añadirlo al final del fichero ~/.ssh/authorized_keys, del usuario con el que quiero conectarme en el servidor destino donde quiero conectarme.

Copiar la llave id_rsa.pub al servidor remoto a traves de: ssh_copy_id id_rsa.pub usuario_remoto@servidor_remoto


Nota: en el servidor destino tiene que estar activados los siguientes parámetros del /etc/ssh/sshd_config


RSAAuthentication yes
PubkeyAuthentication yes




Copiar directorios


Copiar un directorio remoto vía ssh, con compresión y recursividad

scp -rC usuario@servidor.com:/origen ./destino

miércoles, 8 de febrero de 2012

Monitorización Linux

Quien está conectado y que está haciendo
w [user_name]
17:24:24 up 88 days, 17:12, 5 users, load average: 0,09, 0,07, 0,08
USER TTY   FROM         LOGIN@ IDLE   JCPU  PCPU  WHAT
gme  pts/0 paco.bit.mad 09:35  0.00s  0.61s 0.00s w
wdev pts/1 fe.bit.mad   Fri10  5days  0.01s 0.01s -bash
gme  pts/2 fe.bit.mad   Fri11  27:06m 6.31s 6.28s ./gmeser
wdev pts/5 paco.bit.mad 09:35  7:48m  0.01s 0.01s -bash
gme  pts/7 fe.bit.mad   12:23  4:58m  0.04s 0.04s -bash

Otras herramientas de monitorización de actividad, memoria, uso de disco, cpu... http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

viernes, 26 de febrero de 2010

Convertir UTF8 a ASCII

En el siglo XXI, todos los sistemas operativos modernos soportan caracteres multibyte (UTF8, UTF16...), las bases de datos es buena idea crearlas también con un juego de caracteres que posteriormente pueda albergar textos en cualquier idioma.

En el caso de Postgres lo ideal es crear la base de datos así:


CREATE DATABASE mi_bbdd
WITH OWNER = yo_mismo
ENCODING = 'UTF8'
LC_COLLATE = 'es_ES.UTF-8'
LC_CTYPE = 'es_ES.UTF-8';


Una vez guardados los datos podemos recuperarlos con distintos juegos de caracteres, cambiando la variable de entorno client_encoding. Por ejemplo dentro de psql si quieres saber que client_encoding tienes actualmente teclea:



mi_bbdd=> show client_encoding;
client_encoding
-----------------
UTF8
(1 fila)

Si queremos forzar la codificación a otro juego de caracteres, como por ejemplo "latin1" usariamos set client_encoding:


mi_bbdd=>set client_encoding='latin1';
SET
mi_bbdd=>show client_encoding;
client_encoding
-----------------
latin1
(1 fila)

Todo esto está muy bien, porque a veces tienes que extraer datos de la base de datos para incorporarlos a otras bases de datos o aplicaciones.


Imaginaos que tenéis que enviar datos a un sistema muy antiguo, que no soporta la codificación utf8, yo intenté infructuosamente extraerlos a través de una consulta programada en un script bash, usando client_encoding.


Por si os encontráis en la misma situación, os recomiendo que no hagais client_encoding en las consultas y que las hagais en UTF8 de forma normal. Cuando tengais los ficheros generados, entonces aplicar la conversión de juegos de caracteres usando iconv, una función de Linux, que funciona del siguiente modo:



iconv -f UTF-8 -t ISO_8859-1 fichero_entrada -o fichero_salida

Espero que os haya resultado de ayuda.