Útiles PostgreSQL

Lunes, 24 octubre, 2011

Consultar el tamaño de una base de datos en disco:
SELECT pg_size_pretty(pg_database_size('nombre_bd'));

Consultar el tamaño de una tabla en disco:
SELECT pg_size_pretty(pg_total_relation_size('nombre_tabla'));

Ídem sin incluir los índices:
SELECT pg_size_pretty(pg_relation_size('nombre_tabla'));

Analizar consultas:
EXPLAIN query;
EXPLAIN ANALYZE query; --este ejecuta y muestra el informe

Contar el número de elementos que tienen valores distintos en una columna:
select count(distinct nombre_columna) from nombre_tabla;

Averiguar la versión de PostgreSQL que se está ejecutando:
select version();

Reproducir sonido en Java

Viernes, 12 agosto, 2011

Para hacer sonar un simple “bip”:
Toolkit.getDefaultToolkit().beep();

Para reproducir un archivo de audio:

Clip sonido = AudioSystem.getClip();
File file = new File("D:\\tmp\\sound.wav");
sonido.open(AudioSystem.getAudioInputStream(file));
sonido.loop(n); // reproduce el sonido n+1 veces

Si se quiere detener la ejecución del programa hasta que termine de oírse el sonido:

sonido.start();
while (sonido.isRunning()) {
    Thread.sleep(1000);
}
sonido.close();

Exportar contactos de Nokia a Android

Miércoles, 3 agosto, 2011

Para exportar o copiar la lista de contactos desde un Nokia N97 (sistema operativo Symbian) a un Samsung Galaxy S (sistema operativo Android) lo más cómodo ha resultado ser el viejo bluetooth.

Por supuesto hay que activar el bluetooth en ambos teléfonos y en el Galaxy hacerlo visible.

En el N97:

  • Abrir la guía de contactos.
  • Opciones -> Marcar -> Marcar todo.
  • Pulsar y mantener pulsado uno cualquiera de los contactos, hasta que salga un menú de opciones.
  • Enviar tarjeta visita.
  • Por bluetooth.
  • Seleccionar el Samsung Galaxy S como destino.
  • Esperar a que se hayan enviado todos los contactos.

Por supuesto, en vez de seleccionar todos los contactos se puede seleccionar uno a uno aquellos que se quieran enviar al Galaxy.

En el Samsung Galaxy S:

  • Ir a la guía de contactos.
  • Botón de menú -> Más -> Importar/exportar.
  • Importar desde tarjeta SD.
  • Teléfono.
  • Importar todos los archivos VCard.

Así de fácil (y no como indican en otros sitios, que me han hecho perder una hora, ¡y pensar que he estado a punto de instalar el Outlook, GRRRRR!).

Campo autonumérico en PostgreSQL

Miércoles, 4 mayo, 2011

Resumiendo lo publicado en la lista de correos de PostgreSQL:

Crear un campo autonumérico:
CREATE TABLE com.bultos(
id SERIAL PRIMARY KEY,
bulto integer,
bulto_corto integer
);

Insertar una nueva fila:
INSERT INTO com.bultos VALUES (default,2, 1);

Si en la definición de la tabla no se creó un campo autonumérico (serial) se puede crear la secuencia a posteriori:

CREATE SEQUENCE tabla_id_seq;
ALTER TABLE tabla ALTER COLUMN id SET DEFAULT nextval('tabla_id_seq');

Arranque dual con Windows 7

Lunes, 4 abril, 2011

Tras instalar Windows 7 en mi portátil instalé OpenSUSE 11.4. Lamentablemente el arranque dual no se instaló correctamente, OpenSUSE se iniciaba sin problemas pero Windows 7 me daba un error con este mensaje:
“falta BOOTMGR”.

El problema es que Windows 7 crea una pequeña partición (unos 100 MB) en la que se ubican los archivos de arranque del sistema operativo. OpenSUSE configuró mal el gestor de arranque (grub) y al intentar iniciar Windows buscaba dichos archivos en la partición de Windows 7 en vez de en esa pequeña partición que he mencionado.

Para solucionarlo arranqué OpenSUSE, inicié el “Cargador de arranque” y en la lista desplegable que pone “Otro” seleccioné “Editar los archivos de configuración”. Luego seleccioné el archivo “/boot/grub/menu.lst” y para la entrada de windows cambié la línea:
rootnoverify(hd0,1)
por esta otra línea:
rootnoverify(hd0,0)

En mi caso la partición de arranque de Windows 7 es la 0 y no la 1 que es donde está instalado el propio Windows 7.

Sonido en Toshiba y Ubuntu

Sábado, 26 junio, 2010

El problema es que en mi portátil Toshiba, con Ubuntu 10.04, el sonido funciona perfectamente hasta que conecto unos auriculares. Entonces el sonido deja de escucharse por los altavoces integrados en el portátil pero tampoco se escucha por los auriculares.

La solución (parcial) consiste en:
- sudo gedit /etc/modprobe.d/alsa-base
- añadir al final del archivo: options snd-hda-intel model=3stack
- guardar y reiniciar

Ahora, al conectar los auriculares, el sonido se oye tanto por los altavoces del portátil como por los auriculares. Para que sólo quede activo el sonido de los auriculares hay que:
- ir a Sistema-Preferencias-Sonido
- salida
- conector
- seleccionar: analog headphones

Para volver a activar los altavoces habrá que volver a seleccionar: analog output

Instalar PostgreSQL 8.1 en Windows 7

Miércoles, 9 diciembre, 2009

Unas notas para poder instalar PostgreSQL 8.1 en Windows 7.

- Arrancar el servicio llamado “Inicio de sesión secundario”. Ejecutar “services.msc” para abrir la consola de servicios de Windows y ahí buscar el servicio “Inicio de sesión secundario”. Una vez localizado activarlo.
- Crear la ruta de directorios donde se van a guardar los datos (por defecto \program files\PostgreSQL\8.1\data) y darle permisos de lectura y escritura antes de empezar la instalación. Conviene darle permisos de lectura/escritura a todo el directorio 8.1 y sus subdirectorios.
- Ejecutar el instalador e indicar la ruta de instalación que se creó en el punto anterior.

Texto en PostgreSQL

Lunes, 29 junio, 2009

En la lista de correos de PostgreSQL en español Álvaro Herrera da estos consejos que me parece interesante tener en cuenta:

1. nunca uses CHAR
2. usa VARCHAR(n) cuando tengas alguna razón para especificar el largo máximo
3. de lo contrario usa TEXT

Ordenación natural en postgresql

Domingo, 8 febrero, 2009

Continuando el post de ordenación natural añado un enlace al sitio oficial de PostgreSQL en el que un comentarista indica la forma de ordenar de forma natural las secuencias de caracteres que incluyen números. Y por si alguna vez desapareciese dicho comentario, copio las funciones aquí abajo.

CREATE FUNCTION btrsort_nextunit(text) RETURNS text AS $$
SELECT CASE WHEN $1 ~ ‘[^0-9]+’ THEN
COALESCE( SUBSTR( $1, LENGTH(SUBSTRING($1 FROM ‘[^0-9]+’))+1 ),
” )
ELSE
COALESCE( SUBSTR( $1, LENGTH(SUBSTRING($1 FROM ‘[0-9]+’))+1 ),
” )
END
$$ LANGUAGE SQL;

CREATE FUNCTION btrsort(text, integer) RETURNS text AS $$
SELECT CASE WHEN $2-1>0
THEN
RPAD(SUBSTR(COALESCE(SUBSTRING($1 FROM ‘^[^0-9]+’), ”), 1, 12), 12, ‘ ‘) ||
LPAD(SUBSTR(COALESCE(SUBSTRING(btrsort_nextunit($1) FROM ‘^[0-9]+’), ”), 1, 12), 12, 0) || btrsort(btrsort_nextunit(btrsort_nextunit($1)), $2-1)
ELSE
RPAD(SUBSTR(COALESCE(SUBSTRING($1 FROM ‘^[^0-9]+’), ”), 1, 12), 12, ‘ ‘) ||
LPAD(SUBSTR(COALESCE(SUBSTRING(btrsort_nextunit($1) FROM ‘^[0-9]+’), ”), 1, 12), 12, 0)
END
;

$$ LANGUAGE SQL;

CREATE FUNCTION btrsort(text) RETURNS text AS $$
SELECT btrsort($1, 10);
$$ LANGUAGE SQL;

La forma de usarlas es la siguiente. Primero vemos la ordenación que no tiene en cuenta los números (se observa que devuelve 10 como si fuese menor que 8):

SELECT room_number FROM rooms ORDER BY room_number;
room_number
———–
10
8
9
9a

Para ordenar de forma natural:

SELECT room_number
FROM (SELECT room_number, btrsort(room_number) AS room_sort
FROM rooms
ORDER BY room_sort) AS foo

Lo que devuelve:
room_number
———–
8
9
9a
10

Quiero agradecerle al autor original de estas funciones porque me resolvió un verdadero problema en el trabajo. Gracias Ryan Hughes.

El enlace al sitio oficial con el comentario de Ryan.

Efectos hover con CSS

Domingo, 26 octubre, 2008

Efectos interesantes cuando pasas el puntero del ratón sobre un elemento HTML usando CSS:

http://phoenity.com/newtedge/element_hover/


Seguir

Get every new post delivered to your Inbox.