domingo, 3 de octubre de 2010

¿Cómo obtener los nombres de las tablas y vistas en MYSQL y POSTGRESQL?

Quizás se le presente esta situación como se me presentó, mientras programaba.

1- En MYSQL

Para obtener el nombre de todas las tablas de una base de datos en Mysql, podemos usar la simple consulta:

SHOW TABLES

Esto devolverá una sola columna con los nombres de las tablas. Como puedes ver en la figura de abajo:



Sin embargo a partir de la versión 5.0 de MYSQL se introdujeron la Vistas (View) , que en concepto pueden verse como tablas con la particularidad de que en ellas no se pueden hacer inserciones , ya que son el resultado de un consulta en una o más tablas.

Algo a tener en cuenta:


La consulta : SHOW TABLES , a partir de la versión MySQL 5.0.1 , lista también las vistas en la base de datos , como si se tratara de tablas. Hay que ser cuidadosos con esto pues una vista no es lo mismo que una tabla, y puede que se le intente dar el mismo tratamiento de forma errada que a una tabla.

Un ejemplo curioso de no tener cuidado en diferenciar tablas de vistas:

Un ejemplo comprobable de las consecuencias de no tener cuidado con esto es phpmyadmin , un software muy útil que está instalado en casi todos los servidores hosting que tienen instalado Apache – PHP – Mysql . Al exportar un base datos en phpmyadmin incluyendo los datos de la misma , se introduce un error y es que el script intenta insertar datos en las vistas.
Es por eso que a partir de la versión MySQL 5.0.2 , se introduce el modificador FULL a esta consulta que permite diferenciar entre vistas y tablas.


Al ejecutar la consulta: SHOW FULL TABLES

Se introduce una nueva columna Table_Type , la cual permite diferenciar entre tablas: BASE TABLE y vistas: VIEW
Vea el resultado de la consulta en figura siguiente:






De modo que es posible filtrar la consulta para obtener las Vistas , Tablas o ambas como en el ejemplo anterior.

SHOW full TABLES where Table_type='VIEW' => Obtiene solo las vistas
SHOW full TABLES where Table_type='BASE TABLE' => Obtiene solo las tablas


2- En POSTGRESQL

Para obtener las vistas y las tablas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public'

El resultado será una tabla de 3 columnas: table_catalog(nombre de la base de datos) , table_shema, table_name (nombre de la tabla).

Puede ver el ejemplo de la siguiente figura:



Para obtener las vistas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public' and table_type='VIEW'

Para obtener las tablas creadas por usted en POSTGRESQL puede usar la siguiente consulta:

select * from information_schema.tables where table_schema='public' and table_type='BASE TABLE'

domingo, 11 de julio de 2010

Error Javascript: Se esperaba un objeto

Este es un error con el cual en cierta ocasión me encontré cuando cargaba mi página desde IE. Aparentemente no tenía nada mal en mi código , todo estaba más que revisado y probado, como es de costumbre en el FIREFOX funcionaba de maravillas , pero si algo bueno tiene IE es que no acepta casi nada fuera de lugar.


Sin más preámbulos , el error era tan sencillo como que mi código Javascript estaba escrito de la siguiente manera:



<script type="application/javascript">

// código

</script>



Esto no está mal, sin embargo hay muchos navegadores como IE que no reconocen ese MIME ( application/javascript ). El script estaba siendo ignorado y al intentar cambiar el estado de un Objeto y por eso me daba este error: (Se esperaba un objeto).


La solución es muy simple, en vez de poner type="application/javascript" poner type= "text/javascript"


¿Cómo saber me di cuenta del problema?


Ejecuté un código como este:


<script type="application/javascript">

alert('asas');

</script>


Me di cuenta que no pasaba nada, por lo tanto no se estaba reconociendo el script.


Este mi consejo:

- Usen siempre el type= "text/javascript"

Cache en PHP. Un sencillo ejemplo

El hecho de que las casi todas las páginas web actuales sean dinámicas es sin dudas una gran logro en la tecnología web. No siempre fue así y todavía existen las páginas estáticas las cuales solo contienen un simple código HTML que descarga de forma directa y es mostrado en nuestro navegador.

Si bien el uso de lenguajes que se ejecutan en los servidores web y las bases de datos, han posibilitado el dinamismo que hoy en día existen en internet; también es válido destacar la ventaja que tiene una página estática y su rapidez. Una página estática no necesita ejecutar ningún código del lado del servidor, no necesita hacer consultas a una base de datos , muchas veces de extremada complejidad. Es por eso que se han desarrollado mecanismo para simular en páginas dinámicas, la velocidad de acceso que experimenta una página estática.

El uso de Cache

La caché son datos almacenados y duplicados de los originales, estos datos originales deben ser mucho más costosos en tiempo y memoria de obtener, respecto a la copia en la caché. La idea de la cache almacenar una copia la primera vez que se accede al recurso, y a partir de ese momento los accesos que se hagan al recursos tienen una respuesta directa de la cache.
Existe una conocida controversia entre tiempo y memoria muy conocida en programación. Por lo general cuando queremos ganar en tiempo perdemos en memoria. Pero en el caso de la web el espacio es irrelevante, casi todos los servidores host profesionales tiene capacidad suficiente para hacer uso de mecanismo de cache.


¿Cuándo usar mecanismo de cache?
Se debe pensare en usar mecanismo de cache cuando tenemos un recurso que hace un intensivo uso de consultas a bases de datos , cálculos intensivos y además de todo esto este recurso es muy demandado.


¿Cada cuando tiempo se debe refrescar la cache?

El tiempo de vida de la cache antes de ser refrescado, depende en gran medida del recurso. Si es un recurso que rara vez tiene cambios se podría implementar el refrescamiento cada un largo periodo de tiempo o simplemente solo cuando se active una bandera o indicador por el administrador de dicho contenido.

Cache en PHP
No podemos hablar de cache en PHP sin hacer mención de extensión de PHP: APC (Alternative PHP Cache) . Esta es una de las mejores alternativas para implementar uso de cache en nuestras páginas escritas con código PHP. Sin embargo en este artículo no vamos a profundizar en APC sino que vamos a ver como implementar un sistema de Cache usando sencillas directivas PHP.

Ejemplo
Cree un archivo llamado: cache_ini.php (o con el nombre que desee) con el siguiente código:


<?php

// configuración
$cache_dir = 'cache/'; // directorio de cache
$cache_time = 86400; // duración del cache
$cache_ext = 'cache'; // extensión de cache
// script a procesar

$cachepage = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$cachefile = $cachedir.md5($cachepage).'.'.$cacheext;

// calculamos el tiempo del cache
if (@file_exists($cachefile)) {
$cachelast = @filemtime($cachefile);

} else {
$cachelast = 0;
}

@clearstatcache();

// Mostramos el archivo si aun no vence
if (time() - $cachetime <$cachelast) {
@readfile($cachefile);
exit();
}
ob_start();
?>


Cree un archivo llamado: cache_fin.php (o con el nombre que desee) con el siguiente código:




<?php

// Generamos el nuevo archivo cache
$fp = @fopen($cachefile, 'w');
// guardamos el contenido del buffer
@fwrite($fp, ob_get_contents());
@fclose($fp);
ob_end_flush();
?>


Asegúrese que exista un directorio llamado cache en la raíz donde estén archivos que va aplicar la cache, y que este tenga permisos de escritura.
Suponiendo que va a cachear la página de inicio(inde.php) siguiente:

<?php
include("cache_ini.php");


// Contenido de mi pagina

include("cache_fin.php");

?>


Lo único que se debe hacer es incluir el archivo cache_ini.php, al inicio del documento, y cache_fin.php, al final del archivo.
En el archivo cache_ini.php, se puede configurar el tiempo de refrescamiento de la cache , tener en cuenta que este tiempo es por segundo, 3600 es una hora.

Con este ejemplo pueden implementar de forma sencilla cacheo en sus páginas.



Moisés Soft le recomienda investigar más sobre el cacheo en PHP y librerías existentes.
Deje su comentario ,duda o sugerencia.