#!/bin/bash string1='abc'; string2='123'; directory='test_directory'; for file in $(grep -lr $string1 $directory); do echo $file; cp $file /tmp/temporal_file; sed s/${string1}/${string2}/ /tmp/temporal_file > $file; rm -rf /tmp/temporal_file; done;
Pedro Bonilla's blog
About technology and other adictions!!!
sábado, 19 de octubre de 2013
A bash script for replacing a string in every file of a directory
It replaces all occurrences of the search string with the replacement string in every file of a specified directory:
domingo, 5 de febrero de 2012
¿Problemas con la codificación de caracteres en PostgreSQL + PHP?
Hola a todos,
Solo quería recordarles que PostgreSQL tiene funciones integradas para convertir entre distintos tipos de codificaciones de caracteres.
Hace unos meses tuve que realizar un desarrollo sobre una base de datos PostgreSQL con codificación ASCII y, debo decir, que me estaba generando dolores de cabeza el consultar datos con tildes desde PHP.
¿La solución? Convertir internamente los caracteres antes de ser retornados por el motor de base datos.
De esta forma, los datos llegan codificados en UTF-8 limpio y puro para ser post-procesados en nuestros scripts de PHP.
En mi caso particular, utilicé la función "convert using iso_8859_16_to_utf_8".
Un ejemplo de uso:
Solo quería recordarles que PostgreSQL tiene funciones integradas para convertir entre distintos tipos de codificaciones de caracteres.
Hace unos meses tuve que realizar un desarrollo sobre una base de datos PostgreSQL con codificación ASCII y, debo decir, que me estaba generando dolores de cabeza el consultar datos con tildes desde PHP.
¿La solución? Convertir internamente los caracteres antes de ser retornados por el motor de base datos.
De esta forma, los datos llegan codificados en UTF-8 limpio y puro para ser post-procesados en nuestros scripts de PHP.
En mi caso particular, utilicé la función "convert using iso_8859_16_to_utf_8".
Un ejemplo de uso:
SELECT convert(nombre using iso_8859_16_to_utf_8) FROM persona;
domingo, 29 de enero de 2012
Eliminar todas las llaves foráneas de un usuario en Oracle
El siguiente es el código de un procedimiento Oracle que elimina todas las llaves foráneas de un usuario:
Nota: es necesario reemplazar la palabra 'USUARIO' por el nombre del usuario.
DECLARE cadena VARCHAR(30000); BEGIN FOR registro IN (SELECT DISTINCT LOWER(A.TABLE_NAME) AS TABLE_NAME, LOWER(A.CONSTRAINT_NAME) AS CONSTRAINT_NAME FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS C WHERE A.CONSTRAINT_TYPE = 'R' AND A.OWNER = 'USUARIO' AND A.CONSTRAINT_NAME = C.CONSTRAINT_NAME ORDER BY 1,2) LOOP IF SUBSTR(registro.CONSTRAINT_NAME,0,1)='$' THEN cadena := 'ALTER TABLE ' || registro.TABLE_NAME || ' DROP CONSTRAINT "' || registro.CONSTRAINT_NAME || '"'; ELSE cadena := 'ALTER TABLE ' || registro.TABLE_NAME || ' DROP CONSTRAINT ' || registro.CONSTRAINT_NAME; END IF; DBMS_OUTPUT.PUT_LINE(cadena); EXECUTE IMMEDIATE cadena; END LOOP; END;
Nota: es necesario reemplazar la palabra 'USUARIO' por el nombre del usuario.
domingo, 15 de enero de 2012
Eliminar todas las tablas de una base de datos PostgreSQL
Procedimiento:
1- Utilizamos el siguiente comando para generar automáticamente un script SQL con todos los DROPs:
1- Utilizamos el siguiente comando para generar automáticamente un script SQL con todos los DROPs:
~$ psql -h <hostname> -t -d <database> -U <username> -c "SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1;" > droptablesDonde:
- <hostname> = Nombre de la máquina donde reside la base de datos
- <database> = Nombre de la base de datos
- <username> = Nombre de usuario
2- Ejecutamos el script generado en el paso anterior:
~$ psql -h <hostname> -d <database> -U <username> -f droptables
Consultar todos los índices en PostgreSQL y Oracle
PostgreSQL (hasta 14 índices por tabla):
Oracle:
SELECT UPPER(t.relname) as table_name UPPER(a.attname) as column_name FROM pg_class t, pg_class i, pg_index ix, pg_attribute a, pg_namespace WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND ( a.attnum = ix.indkey[0] OR a.attnum = ix.indkey[1] OR a.attnum = ix.indkey[2] OR a.attnum = ix.indkey[3] OR a.attnum = ix.indkey[5] OR a.attnum = ix.indkey[6] OR a.attnum = ix.indkey[7] OR a.attnum = ix.indkey[8] OR a.attnum = ix.indkey[9] OR a.attnum = ix.indkey[10] OR a.attnum = ix.indkey[11] OR a.attnum = ix.indkey[12] OR a.attnum = ix.indkey[13] OR a.attnum = ix.indkey[14] ) AND t.relkind = 'r' AND t.relnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' ORDER BY t.relname, a.attname;
Oracle:
SELECT table_name, column_name FROM user_ind_columns ORDER BY table_name, column_name
lunes, 9 de enero de 2012
Limpiar/vaciar/eliminar un tablespace del tipo UNDO en Oracle
1-
Donde:
CREATE UNDO TABLESPACE nuevo DATAFILE '/media/sdb1/nuevo.dbf' SIZE 1M AUTOEXTEND ON MAXSIZE 10M;
Donde:
- SIZE -> Tamaño inicial en Megabytes.
- AUTOEXTEND ON MAXSIZE -> Tamaño máximo en Megabytes.
2-
ALTER SYSTEM SET UNDO_TABLESPACE = nuevo;
3-
DROP TABLESPACE UNDO;
Nota: reemplazar UNDO por el nombre del tablespace UNDO que quieres limpiar/vaciar/eliminar.
Como pudieron darse cuenta, la solución para limpiar/vaciar un tablespace tipo UNDO es sustituirlo por uno nuevo.
Saludos.
Suscribirse a:
Entradas (Atom)