<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Damián Culotta &#187; Bases de datos</title>
	<atom:link href="http://www.damianculotta.com.ar/category/bases-de-datos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.damianculotta.com.ar</link>
	<description>Sería un &#34;bienvenidos a mi&#34;, pero Rozitchner me ganó de mano</description>
	<lastBuildDate>Thu, 05 Jan 2012 09:10:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Simulando show tables y describe de Mysql en PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 08:00:52 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=1563</guid>
		<description><![CDATA[Si hay algo que me toca extrañar de Mysql cuando trabajo con PostgreSql (en particular cuando estoy haciéndolo por consola y de forma remota), son los dos comandos que ayudan a armar los queries que vamos necesitando. A pesar que &#8230; <a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si hay algo que me toca extrañar de <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a> cuando trabajo con <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a> (en particular cuando estoy haciéndolo por consola y de forma remota), son los dos comandos que ayudan a armar los queries que vamos necesitando.</p>
<p>A pesar que <a title="documentación oficial" href="http://dev.mysql.com/doc/refman/5.0/es/information-schema.html" target="_self">desde Mysql 5 existe el catálogo con la metadata de las bases de datos</a>, para quienes venimos desde versiones previas, el uso de funciones como <a title="documentación oficial" href="http://dev.mysql.com/doc/refman/5.0/es/show-tables.html" target="_self">show tables</a> y <a title="documentación oficial" href="http://dev.mysql.com/doc/refman/5.0/es/describe.html" target="_self">describe</a> han sido casi fundamentales al momento de trabajar con la base de datos.</p>
<p>Para quienes no conozcan los comandos, el primero nos lista las tablas que existen en nuestra base de datos, y el segundo, pasándole como valor el nombre de una tabla, nos muestra qué columnas tiene, con qué tipo de datos, información de los índices y algunos campos más.</p>
<p>Vayamos a los ejemplos usando una la base de datos de Magento.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">mysql&gt; show tables;
+--------------------------------------------+
| Tables_in_magento                          |
+--------------------------------------------+
| admin_assert                               |
| admin_role                                 |
| admin_rule                                 |
| admin_user                                 |
| adminnotification_inbox                    |
| amazonpayments_api_debug                   |
| api_assert                                 |
| api_role                                   |
| api_rule                                   |
| api_session                                |
| api_user                                   |
| catalog_category_entity                    |
| ...                                        |
+--------------------------------------------+</pre></div></div>

<p>La cantidad de tablas es bastante más amplia, para el ejemplo mostramos sólo una parte.</p>
<p><span id="more-1563"></span>Ahora bien, tengo que hacer una consulta que me devuelva sólo algunos valores, pero no recuerdo bien los campos. Aquí es donde describe nos va a ayudar. Supongamos que es la tabla catalog_category_entity la que necesitamos usar y no sabemos nada de sus campos.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">mysql&gt; describe catalog_category_entity;
+------------------+----------------------+------+-----+---------------------+----------------+
| Field            | Type                 | Null | Key | Default             | Extra          |
+------------------+----------------------+------+-----+---------------------+----------------+
| entity_id        | int(10) unsigned     | NO   | PRI | NULL                | auto_increment |
| entity_type_id   | smallint(8) unsigned | NO   |     | 0                   |                |
| attribute_set_id | smallint(5) unsigned | NO   |     | 0                   |                |
| parent_id        | int(10) unsigned     | NO   |     | 0                   |                |
| created_at       | datetime             | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at       | datetime             | NO   |     | 0000-00-00 00:00:00 |                |
| path             | varchar(255)         | NO   |     | NULL                |                |
| position         | int(11)              | NO   |     | NULL                |                |
| level            | int(11)              | NO   | MUL | NULL                |                |
| children_count   | int(11)              | NO   |     | NULL                |                |
+------------------+----------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)</pre></div></div>

<p>Como ven, nos da el detalle de la tabla y ahora si, no sólo conocemos los campos posibles, sino el tipo de dato y si tienen algún índice.</p>
<p>De aquí en más, será bastante más sencillo seguir trabajando con nuestros queries.</p>
<p>Hasta acá todo muy lindo pero, como decía al comienzo, cuando toca trabajar con <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a> éstas dos funciones se extrañan; aunque gracias a la metadata que nos brinda, podemos resolver ésto con algunas consultas al <a title="documentación oficial" href="http://www.postgresql.org/docs/8.4/static/information-schema.html" target="_self">information_schema</a>.</p>
<p>Si bien sólo voy a abordar la forma de emular las dos funciones que mencioné, seria recomendable que hagan una revisión completa para conocer mejor la información que puede obtenerse.</p>
<p>Vamos con el primer caso: obtener la lista de tablas de una base de datos.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
  <span style="color: #993333; font-weight: bold;">TABLES</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span><span style="color: #66cc66;">,</span>
  pg_description<span style="color: #66cc66;">.</span>description
<span style="color: #993333; font-weight: bold;">FROM</span>
  information_schema<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLES</span>
  <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span>
    pg_class <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">TABLES</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span>::name <span style="color: #66cc66;">=</span> pg_class<span style="color: #66cc66;">.</span>relname
  <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span>
    pg_description <span style="color: #993333; font-weight: bold;">ON</span> pg_class<span style="color: #66cc66;">.</span>oid <span style="color: #66cc66;">=</span> pg_description<span style="color: #66cc66;">.</span>objoid <span style="color: #993333; font-weight: bold;">AND</span> pg_description<span style="color: #66cc66;">.</span>objsubid <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>
<span style="color: #993333; font-weight: bold;">WHERE</span>
  <span style="color: #993333; font-weight: bold;">TABLES</span><span style="color: #66cc66;">.</span>table_schema::text <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'public'</span>::text <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #993333; font-weight: bold;">TABLES</span><span style="color: #66cc66;">.</span>table_type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'BASE TABLE'</span>::text
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span>
  <span style="color: #993333; font-weight: bold;">TABLES</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">ASC</span>;</pre></div></div>

<p>El resultado de ésta consulta, será lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">        table_name         |                   description
---------------------------+-------------------------------------------------
 errores                   | Errores del servidor
 logs                      | Logs de tareas de backend del sistema
(2 rows)</pre></div></div>

<p>A diferencia de lo que se obtiene con la versión original de <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a>, en el caso de <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a> he agregado el comentario de la tabla, pero es un detalle personal y dependerá de que tengan los comentarios.</p>
<p>Otra aclaración es que el show tables de <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a> devuelve tanto tablas como vistas. En la consulta que hicimos en <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a>, he filtrado para que sólo devuelva las tablas (es la condición que indica tables.table_type = &#8216;BASE TABLE&#8217;). Si quisiéramos que en <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a> nos muestre las vistas, o bien deberíamos aplicarlo a la condición o bien quitar el filtro de tipo de tabla.</p>
<p>La segunda función a simular es la que nos describe la composición de una tabla. Nuevamente, vamos a recurrir a una consulta y me voy a basar en la tabla errores que me devolvió la consulta anterior.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>column_name<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>data_type<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>column_default<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>is_nullable<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>character_maximum_length<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>numeric_precision<span style="color: #66cc66;">,</span>
  pg_description<span style="color: #66cc66;">.</span>description<span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span>
<span style="color: #993333; font-weight: bold;">FROM</span>
  information_schema<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">COLUMNS</span>
  <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span>
    pg_class <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span>::name <span style="color: #66cc66;">=</span> pg_class<span style="color: #66cc66;">.</span>relname
  <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span>
    pg_description <span style="color: #993333; font-weight: bold;">ON</span> pg_class<span style="color: #66cc66;">.</span>oid <span style="color: #66cc66;">=</span> pg_description<span style="color: #66cc66;">.</span>objoid <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>ordinal_position::<span style="color: #993333; font-weight: bold;">INTEGER</span> <span style="color: #66cc66;">=</span> pg_description<span style="color: #66cc66;">.</span>objsubid
<span style="color: #993333; font-weight: bold;">WHERE</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>table_schema::text <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'public'</span>::text
  <span style="color: #993333; font-weight: bold;">AND</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'errores'</span>
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">ASC</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">COLUMNS</span><span style="color: #66cc66;">.</span>ordinal_position <span style="color: #993333; font-weight: bold;">ASC</span>
;</pre></div></div>

<p>El resultado de ésta consulta, que aplica una condición pidiendo solo los campos de una tabla determinada, seria el siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">   column_name   |          data_type          |             column_default           | is_nullable | character_maximum_length | numeric_precision | description | table_name
-----------------+-----------------------------+--------------------------------------+-------------+--------------------------+-------------------+-------------+------------
 id              | integer                     | nextval('seq_ierrores_id'::regclass) | NO          |                          |                32 |             | errores
 fecha           | timestamp without time zone |                                      | YES         |                          |                   |             | errores
 usuario         | character varying           |                                      | YES         |                       50 |                   |             | errores
 nerror          | character varying           |                                      | YES         |                      100 |                   |             | errores
 descripcionasp  | character varying           |                                      | YES         |                      255 |                   |             | errores
 categoria       | character varying           |                                      | YES         |                      255 |                   |             | errores
 columna         | smallint                    |                                      | YES         |                          |                16 |             | errores
 descripcion     | character varying           |                                      | YES         |                      255 |                   |             | errores
 archivo         | character varying           |                                      | YES         |                      255 |                   |             | errores
 linea           | smallint                    |                                      | YES         |                          |                16 |             | errores
 numero          | bigint                      |                                      | YES         |                          |                64 |             | errores
 codigofuente    | character varying           |                                      | YES         |                      255 |                   |             | errores
 revisado        | boolean                     | false                                | YES         |                          |                   |             | errores
 usuariorevision | smallint                    |                                      | YES         |                          |                16 |             | errores
 fecharevision   | timestamp without time zone |                                      | YES         |                          |                   |             | errores
(21 rows)</pre></div></div>

<p>Si prestan atención, ya tenemos los mismos resultados (detalle más, detalle menos) que obteníamos al comienzo con funciones nativas.</p>
<p>Sólo restan un par de aclaraciones. La última consulta trajo solamente los campos de una tabla determinada porque aplicamos un filtro.  Habitualmente, lo que suelo hacer es crear, al menos, dos vistas con éstas consultas. En el caso del último ejemplo, no aplico filtro en la consulta, pero al momento de seleccionar la vista, aplicamos una condición donde filtramos por la tabla que queremos consultar.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1563" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/" title="Restaurar un backup plano en PostgreSql">Restaurar un backup plano en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/" title="Backup de tablas específicas en PostgreSql">Backup de tablas específicas en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/" title="Duplicando una tabla en Mysql">Duplicando una tabla en Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Update con Subselect en Mysql</title>
		<link>http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 20:39:55 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=1533</guid>
		<description><![CDATA[Es posible que en algunas oportunidades necesitemos hacer una actualización a una tabla en donde la clave a utilizar en el where nos sea desconocida, y que sólo podamos obtenerla partiendo de una segunda clave en una segunda tabla. El &#8230; <a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Es posible que en algunas oportunidades necesitemos hacer una actualización a una tabla en donde la clave a utilizar en el where nos sea desconocida, y que sólo podamos obtenerla partiendo de una segunda clave en una segunda tabla.</p>
<p>El truco para ésto es utilizar <a title="documentación oficial" href="http://dev.mysql.com/doc/refman/5.0/es/subqueries.html" target="_self">subconsultas</a>.</p>
<p>Lo más probable es que al pensar en esto, escriban un ejemplo como el siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">UPDATE</span>
  tabla1
<span style="color: #990099; font-weight: bold;">SET</span>
  campo <span style="color: #CC0099;">=</span> <span style="color: #008000;">'nuevo<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
<span style="color: #990099; font-weight: bold;">WHERE</span>
  campo_de_referencia <span style="color: #CC0099;">=</span> <span style="color: #FF00FF;">&#40;</span>
    <span style="color: #990099; font-weight: bold;">SELECT</span>
      tabla1.valor
    <span style="color: #990099; font-weight: bold;">FROM</span>
      tabla1<span style="color: #000033;">,</span>
      tabla2
    <span style="color: #990099; font-weight: bold;">WHERE</span>
      tabla1.campo <span style="color: #CC0099;">=</span> <span style="color: #008000;">'viejo<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
      <span style="color: #CC0099; font-weight: bold;">AND</span>
      tabla1.clave_primaria <span style="color: #CC0099;">=</span> tabla2.clave_foranea
      <span style="color: #CC0099; font-weight: bold;">AND</span>
      tabla2.campo_de_referencia <span style="color: #CC0099;">=</span> <span style="color: #008000;">'otro<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
  <span style="color: #FF00FF;">&#41;</span>
<span style="color: #000033;">;</span></pre></div></div>

<p>Lamentablemente, ésto no va a funcionar y van a obtener el siguiente error.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">You can't specify target table 'tabla1' for update in FROM clause</pre></div></div>

<p><span id="more-1533"></span>Esto se debe a que como restricción, no puede actualizarse una tabla y al mismo tiempo hacer una consulta sobre si misma.</p>
<p>¿Cuál es la solución entonces?, utilizar un alias para la subconsulta.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">UPDATE</span>
  tabla1
<span style="color: #990099; font-weight: bold;">SET</span>
  campo <span style="color: #CC0099;">=</span> <span style="color: #008000;">'nuevo<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
<span style="color: #990099; font-weight: bold;">WHERE</span>
  campo_de_referencia <span style="color: #CC0099;">=</span> <span style="color: #FF00FF;">&#40;</span>
    <span style="color: #990099; font-weight: bold;">SELECT</span>
      valor
    <span style="color: #990099; font-weight: bold;">FROM</span>
      <span style="color: #FF00FF;">&#40;</span>
        <span style="color: #990099; font-weight: bold;">SELECT</span>
          tabla1.valor
        <span style="color: #990099; font-weight: bold;">FROM</span>
          tabla1<span style="color: #000033;">,</span>
          tabla2
        <span style="color: #990099; font-weight: bold;">WHERE</span>
          tabla1.campo <span style="color: #CC0099;">=</span> <span style="color: #008000;">'viejo<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
          <span style="color: #CC0099; font-weight: bold;">AND</span>
          tabla1.clave_primaria <span style="color: #CC0099;">=</span> tabla2.clave_foranea
          <span style="color: #CC0099; font-weight: bold;">AND</span>
          tabla2.campo_de_referencia <span style="color: #CC0099;">=</span> <span style="color: #008000;">'otro<span style="color: #008080; font-weight: bold;">_</span>valor'</span>
      <span style="color: #FF00FF;">&#41;</span>
    <span style="color: #990099; font-weight: bold;">AS</span> alias_tabla1
  <span style="color: #FF00FF;">&#41;</span>
<span style="color: #000033;">;</span></pre></div></div>

<p>Ahora si, nuestra subconsulta queda encerrada en un alias, y ese alias es el que se aplica para la subconsulta en el update.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1533" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/" title="Duplicando una tabla en Mysql">Duplicando una tabla en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/" title="Cambiando el Definer de un Procedure en Mysql">Cambiando el Definer de un Procedure en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/" title="Convirtiendo de Timestamp a Date desde Mysql">Convirtiendo de Timestamp a Date desde Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restaurar un backup plano en PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 05:06:52 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[backups]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=1466</guid>
		<description><![CDATA[En los posts previos sobre temas referentes a backups en PostgreSql, vimos un caso en el cual, en lugar de realizar el backup generando un dump comprimido, lo hacíamos en formato plano (en particular, el post hablaba sobre hacer un &#8230; <a href="http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En los posts previos sobre temas referentes a backups en <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a>, vimos un caso en el cual, en lugar de realizar el backup generando un dump comprimido, lo hacíamos en formato plano (en particular, el post hablaba sobre <a title="exportar sólo las tablas indicadas" href="http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/" target="_self">hacer un backup de sólo algunas tablas de una base de datos</a>).</p>
<p>Ahora bien, cómo ¿hacemos para volver a introducir esos datos?.</p>
<p>Simplemente basta con ejecutar este comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">psql <span style="color: #660033;">-U</span> usuario <span style="color: #660033;">-d</span> basededatos <span style="color: #660033;">-h</span> host <span style="color: #660033;">-f</span> archivoplano.sql</pre></div></div>

<p>Automáticamente se nos pedirá la contraseña</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Password <span style="color: #000000; font-weight: bold;">for</span> user usuario:</pre></div></div>

<p>Una vez ingresada, nuestros datos pasarán a insertarse en <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a>.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1466" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/" title="Backup de tablas específicas en PostgreSql">Backup de tablas específicas en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/" title="Restaurar backups de PostgreSql">Restaurar backups de PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/" title="Automatizar backups de PostgreSql">Automatizar backups de PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/" title="Backup de bases de datos en PostgreSql">Backup de bases de datos en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cómo crear un trigger con un Definer específico en Mysql</title>
		<link>http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 04:36:57 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[administración]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=1021</guid>
		<description><![CDATA[Normalmente, cuando se trabaja en entornos de desarrollo locales, se suele dejar al usuario con mayor privilegio y con eso aguantamos hasta el momento de pasar a producción. Es en ese pasaje cuando descubrimos que el usuario que tenemos asignado &#8230; <a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Normalmente, cuando se trabaja en entornos de desarrollo locales, se suele dejar al usuario con mayor privilegio y con eso aguantamos hasta el momento de pasar a producción.</p>
<p>Es en ese pasaje cuando descubrimos que el usuario que tenemos asignado está totalmente restringido sólo a nuestra base de datos, y hay ciertas operaciones que pueden resultar imposibles de resolver.</p>
<p>Un escenario posible seria al intentar crear un trigger, obtengamos un error por falta de privilegios.</p>
<p>Si además de éste usuario, podemos acceder a uno con privilegios más elevados (el usuario root es el habitual), podríamos crear el trigger.</p>
<p>Esto tampoco nos va a servir, porque cuando el usuario sin privilegios quiere ejecutar el trigger, le será negada la operación ya que el propietario del trigger es quien lo creó (en este coloquial ejemplo, sería propiedad del usuario root).</p>
<p>Ahora bien, la forma de poder crear un trigger pero asignándole un propietario que no se corresponde con el usuario que esté ejecutando, seria la siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">DEFINER</span> <span style="color: #CC0099;">=</span> <span style="color: #008000;">'usuario'</span>@<span style="color: #008000;">'host'</span> <span style="color: #990099; font-weight: bold;">TRIGGER</span> mi_trigger BEFORE <span style="color: #990099; font-weight: bold;">INSERT</span> <span style="color: #990099; font-weight: bold;">ON</span> mi_tabla
  <span style="color: #990099; font-weight: bold;">FOR EACH ROW</span> <span style="color: #990099; font-weight: bold;">BEGIN</span>
&nbsp;
  <span style="color: #808000; font-style: italic;">/* El código que tengamos que usar */</span>
&nbsp;
<span style="color: #009900;">END</span><span style="color: #000033;">;</span></pre></div></div>

<p>De ésta forma, al crearlo con el usuario con privilegios, vamos a poder ejecutar la sentencia de creación del trigger y éste va a estar disponible para el usuario restringido que le indiquemos.</p>
<p>(Más que post esto parece un post-it)</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1021" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/" title="Cambiando el Definer de un Procedure en Mysql">Cambiando el Definer de un Procedure en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/" title="Duplicando una tabla en Mysql">Duplicando una tabla en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/" title="Convirtiendo de Timestamp a Date desde Mysql">Convirtiendo de Timestamp a Date desde Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backup de tablas específicas en PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 05:30:33 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[backups]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=1003</guid>
		<description><![CDATA[Ya vimos cómo se hacen los backups, como se los automatiza e incluso, cómo restaurar esos backups en PostgreSql. Hace unos días tuve un requerimiento por el cual, si bien la base de datos en cuestión ya se backupea, me &#8230; <a href="http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ya vimos cómo se hacen los backups, como se los automatiza e incluso, cómo restaurar esos backups en PostgreSql.</p>
<p>Hace unos días tuve un requerimiento por el cual, si bien la base de datos en cuestión ya se backupea, me solicitaban hacer un backup con mayor periodicidad, pero sólo de un conjunto de tablas.</p>
<p>Bien, gracias a la flexibilidad de nuestro motor favorito, esto es muy sencillo.</p>
<p>Repasemos cómo hacíamos para hacer un dump completo de nuestro base de datos.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-F</span> c <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mibase.backup&quot;</span> mibase</pre></div></div>

<p>Para exportar sólo un conjunto de tablas, tenemos que hacer un pequeño cambio.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-t</span> tabla <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mitabla.sql&quot;</span> mibase</pre></div></div>

<p>La diferencia entre ambos scripts radica en que agregamos el parámetro -t seguido del nombre de nuestra tabla (en este caso, con poca inspiración, usé tabla).</p>
<p>Lo que vamos a obtener es, solamente,  un backup de la tabla indicada, con su estructura y datos.</p>
<p>Si lo que necesitamos son un conjunto de tablas, tenemos dos formas de hacerlo.  La primera es usando el parámetro -t tantas veces como tablas vayamos a requerir.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-t</span> usuarios <span style="color: #660033;">-t</span> documentos <span style="color: #660033;">-t</span> logs <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mistablas.sql&quot;</span> mibase</pre></div></div>

<p>La segunda forma, es utilizar patrones (si es que se aplica a nuestro caso).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-t</span> productos_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mistablas.sql&quot;</span> mibase</pre></div></div>

<p>En ambos casos, se hará un backup de las tablas, vistas y/o secuencias que coincidan con lo indicado.</p>
<p><span id="more-1003"></span>Llegado el caso, podríamos combinar ambos ejemplos y generar algo parecido a esto.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-t</span> usuarios_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-t</span> documentos_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-t</span> logs_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mistablas.sql&quot;</span> mibase</pre></div></div>

<p>De ésta forma obtendríamos todas las tablas (y/o vistas y/o secuencias) que comienzen con usuarios_, documentos_ y logs_.</p>
<p>Hay que tener en cuenta que al usar ésta técnica, pg_dump no intentará obtener aquellos objetos de los cuales puedan depender nuestras tablas. Es por eso que no se da garantía de que pueda restaurarse sin problemas éste backup.</p>
<p>Si prestan atención, comparando con el primer ejemplo que hace un backup total de la base de datos, hice un cambio al parámetro -F, pasándole como valor p en lugar de c. Lo que hace este cambio es devolver el backup en formato plano y no comprimido.</p>
<p>Otro escenario posible es que, en lugar de querer backupear ciertas tablas, quieren obtener todas, menos algunas. Ésto también es posible, sólo debemos hacer otro pequeño cambio.</p>
<p>El ejemplo sería el siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-T</span> productos_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mibase.sql&quot;</span> mibase</pre></div></div>

<p>El parámetro -T es el que se encarga de excluir una tabla. De ésta forma, el ejemplo anterior haría un backup completo, pero sin las tablas indicadas.</p>
<p>El tercer escenario, sería la combinación de ambos parámetros.</p>
<p>El comportamiento en este caso varía un poco. Vamos con un ejemplo.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_dump <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-T</span> <span style="color: #000000; font-weight: bold;">*</span>productos <span style="color: #660033;">-t</span> documentos_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-t</span> logs_<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-F</span> p <span style="color: #660033;">-b</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mistablas.sql&quot;</span> mibase</pre></div></div>

<p>Con ambos parámetros presentes, lo que se obtiene es un backup de los objetos indicados en -t pero que no coincidan con el patrón que toma -T.</p>
<p>Según el ejemplo, se hará backup de todas las tablas que comiencen con documentos_ y logs_, pero se excluirán todas aquellas que terminen con productos. Es decir que si existiera una tabla llamada logs_productos, ésta no será backupeada.</p>
<p>De más está decir que nunca hay que dejar de repasar la <a title="documentación de PostgreSql 8.3" href="http://www.postgresql.org/docs/8.3/static/app-pgdump.html" target="_self">documentación oficial</a> y hacer las pruebas necesarias antes de llevar algo a producción.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1003" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/" title="Restaurar un backup plano en PostgreSql">Restaurar un backup plano en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/" title="Restaurar backups de PostgreSql">Restaurar backups de PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/" title="Automatizar backups de PostgreSql">Automatizar backups de PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/" title="Backup de bases de datos en PostgreSql">Backup de bases de datos en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Duplicando una tabla en Mysql</title>
		<link>http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 01:47:09 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=962</guid>
		<description><![CDATA[Hay ocasiones en las que necesitamos hacer pruebas sobre una tabla que se encuentra en producción. Una forma rápida de hacer esa prueba sin afectar los datos, es hacer una copia de la tabla. En realidad, si tenemos tiempo siempre &#8230; <a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hay ocasiones en las que necesitamos hacer pruebas sobre una tabla que se encuentra en producción.</p>
<p>Una forma rápida de hacer esa prueba sin afectar los datos, es hacer una copia de la tabla.</p>
<p>En realidad, si tenemos tiempo siempre será más cómodo llevar esos datos a un entorno de staging para trabajar más tranquilos; vamos a pensar que no tenemos tiempo&#8230; y mucho menos un entorno se staging.</p>
<p>Si queremos duplicar nuestra tabla, sólo debemos ejecutar la siguiente instrucción:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">TABLE</span> tabla_nueva <span style="color: #CC0099; font-weight: bold;">LIKE</span> tabla_original<span style="color: #000033;">;</span></pre></div></div>

<p>De ésta forma. obtenemos una tabla idéntica en cuanto a estructura.</p>
<p>Si necesitamos los datos de esa tabla en nuestra copia, insertamos todos los registros de la original de la siguiente forma:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">INSERT</span> <span style="color: #990099; font-weight: bold;">INTO</span> tabla_nueva <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> tabla_original<span style="color: #000033;">;</span></pre></div></div>

<p>Al haber una correspondencia exacta en cuanto a las columnas y tipos de datos, los registros son insertados sin mayor problema.</p>
<p>Hay una segunda forma de obtener el mismo resultado que las dos consultas previas. Podemos, con una sola instrucción, lograr la misma tabla.</p>
<p>En este caso, debemos ejecutar:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">TABLE</span> tabla_nueva <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> tabla_original<span style="color: #000033;">;</span></pre></div></div>

<p>Con esto, dos formas muy rápidas de duplicar una tabla y, si se quiere, sus datos.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=962" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/" title="Cambiando el Definer de un Procedure en Mysql">Cambiando el Definer de un Procedure en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/" title="Convirtiendo de Timestamp a Date desde Mysql">Convirtiendo de Timestamp a Date desde Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cambiando el Definer de un Procedure en Mysql</title>
		<link>http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 22:19:57 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[administración]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=620</guid>
		<description><![CDATA[En el día de ayer, nos tocó hacer un deploy en un VPS. Hubo un pequeño error a causa de la falta de control (tanto de nuestro lado como del de los implementadores), y cuando se importó la base de &#8230; <a href="http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En el día de ayer, nos tocó hacer un deploy en un <a title="definición en Wikipedia" href="http://es.wikipedia.org/wiki/Servidor_virtual" target="_self">VPS</a>.</p>
<p>Hubo un pequeño error a causa de la falta de control (tanto de nuestro lado como del de los implementadores), y cuando se importó la base de datos, se crearon los <a title="definición en Wikipedia" href="http://es.wikipedia.org/wiki/Stored_procedure" target="_self">Procedure</a> con un usuario propietario que no era el mismo que teníamos para acceder a la base de datos.</p>
<p>Luego de lidiar un rato, logramos que nos facilitaran el usuario root de <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a>, y ahí fue otro cantar.</p>
<p>Antes de conseguir el usuario, uno de los caminos era arreglar el script sql y mandarlo nuevamente para que se borrara la base de datos y se volviera a importar.</p>
<p>Si bien cumple su cometido, hay otro aún más sencillo e igual de efectivo.</p>
<p>Ya con un usuario con los permisos necesarios, para conocer qué Procedures tenemos definidos en nuestras bases de datos dentro de <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a>, sólo es necesario correr ésta consulta.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> mysql.proc<span style="color: #000033;">;</span></pre></div></div>

<p>Así veremos todos los que tengamos definidos, sin importar ninguna condición.</p>
<p><span id="more-620"></span>Para el problema que se había presentado, había que modificar el propietario (Definer) de esas funciones. Por suerte, nada que un par de queries no puedan arreglar.</p>
<p>Lo primero es aislar el set de registros que vamos a modificar, al menos, como seguridad.</p>
<p>Para eso, corremos esta consulta.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">FROM</span> mysql.proc <span style="color: #990099; font-weight: bold;">WHERE</span> <span style="color: #990099; font-weight: bold;">definer</span> <span style="color: #CC0099;">=</span> <span style="color: #008000;">'usuario1@dominio1'</span><span style="color: #000033;">;</span></pre></div></div>

<p>Vamos a ver todos las funciones que están definidas con ese usuario como propietario.</p>
<p>Ahora, para cambiarlo, alcanza con hacer un update a esos registros. En nuestro ejemplo, correríamos ésta otra consulta.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">UPDATE</span> mysql.proc <span style="color: #990099; font-weight: bold;">SET</span> <span style="color: #990099; font-weight: bold;">definer</span> <span style="color: #CC0099;">=</span> <span style="color: #008000;">'usuario2'</span>@<span style="color: #008000;">'dominio2'</span> <span style="color: #990099; font-weight: bold;">WHERE</span> <span style="color: #990099; font-weight: bold;">definer</span> <span style="color: #CC0099;">=</span> <span style="color: #008000;">'usuario1@dominio1'</span><span style="color: #000033;">;</span></pre></div></div>

<p>Y para finalizar, hacemos efectivos los cambios en los privilegios.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">FLUSH <span style="color: #990099; font-weight: bold;">PRIVILEGES</span><span style="color: #000033;">;</span></pre></div></div>

<p>Asunto resuelto, ya tenemos arreglado este pequeño problema de permisos.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=620" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/" title="Duplicando una tabla en Mysql">Duplicando una tabla en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/" title="Convirtiendo de Timestamp a Date desde Mysql">Convirtiendo de Timestamp a Date desde Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Convirtiendo de Timestamp a Date desde Mysql</title>
		<link>http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 02:37:43 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=517</guid>
		<description><![CDATA[Cuando estaba a punto de irme de la oficina, Guille me tiró una preguntita, de esas que hacen que cuando no te acordás, te pongas a probar y probar hasta resolverlo. La pregunta se refería a cómo pasar una fecha &#8230; <a href="http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cuando estaba a punto de irme de la oficina, <a title="las mejores fotos, videos e imagenes de la web" href="http://www.gatosenelteclado.com.ar/blog/" target="_self">Guille</a> me tiró una preguntita, de esas que hacen que cuando no te acordás, te pongas a probar y probar hasta resolverlo.</p>
<p>La pregunta se refería a cómo pasar una fecha en formato <a title="definición en Wikipedia" href="http://es.wikipedia.org/wiki/Timestamp" target="_self">Timestamp</a> al formato Date (una representación más humana).</p>
<p>Lo primero que pensé fue en usar <a title="sitio oficial" href="http://www.php.net" target="_self">Php</a> (por asumir qué así lo quería hacer), pero no, lo que quería era sacar el registro, directamente desde la base de datos, aplicando la conversión en el propio <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a> al momento de la consulta.</p>
<p>Como ya me ha pasado en otras ocasiones, supuse que encontraría en la documentación alguna función mágica que resolviera el problema&#8230; y por suerte, no me equivoqué.</p>
<p>Para convertir directamente desde la consulta una fecha desde timestamp a date, sólo hay que aplicar la siguiente función:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">select</span> <span style="color: #000099;">from_unixtime</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1224815188</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span></pre></div></div>

<p>El resultado que obtenemos es:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">2008</span>-<span style="color: #000000;">10</span>-<span style="color: #000000;">24</span> 00:<span style="color: #000000;">26</span>:<span style="color: #000000;">28</span></pre></div></div>

<p>Nada más, con eso, problema resuelto.</p>
<p>Para más referencias sobre funciones de fecha, pueden mirar en la <a title="documentación sobre fechas y funciones en Mysql" href="http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html" target="_self">documentación oficial</a>.</p>
<p>(Otro post cortito y al pié).</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=517" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/01/30/duplicando-una-tabla-en-mysql/" title="Duplicando una tabla en Mysql">Duplicando una tabla en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2008/10/29/cambiando-el-definer-de-un-procedure-en-mysql/" title="Cambiando el Definer de un Procedure en Mysql">Cambiando el Definer de un Procedure en Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2008/10/24/convirtiendo-de-timestamp-a-date-desde-mysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Restaurar backups de Mysql</title>
		<link>http://www.damianculotta.com.ar/2008/10/15/restaurar-backups-de-mysql/</link>
		<comments>http://www.damianculotta.com.ar/2008/10/15/restaurar-backups-de-mysql/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 03:45:08 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[backups]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=436</guid>
		<description><![CDATA[En ésta oportunidad, vamos a ver cómo restaurar una base de datos en Mysql. Además, algunas aclaraciones sobre el uso de mysqldump que pueden ayudarnos con las restauraciones de bases de datos. La forma de restaurar una base de datos &#8230; <a href="http://www.damianculotta.com.ar/2008/10/15/restaurar-backups-de-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En ésta oportunidad, vamos a ver cómo restaurar una base de datos en Mysql. Además, algunas aclaraciones sobre el uso de mysqldump que pueden ayudarnos con las restauraciones de bases de datos.</p>
<p>La forma de restaurar una base de datos <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a> desde la consola, tomando un backup, sería asi.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysql <span style="color: #660033;">-u</span> usuario <span style="color: #660033;">-p</span> basededatos <span style="color: #000000; font-weight: bold;">&lt;</span> basededatos.sql</pre></div></div>

<p>El escenario que estoy suponiendo, implica que la base de datos que están queriendo importar no existe en su servidor Mysql.</p>
<p>Si este supuesto es correcto, se van a encontrar con un problemita, o mejor dicho, con un mensaje al ejecutar el comando.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ERROR <span style="color: #000000;">1049</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">42000</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: Unknown database <span style="color: #ff0000;">'basededatos'</span></pre></div></div>

<p>Esto se debe a la inexistencia de la base dentro de nuestro <a title="sitio oficial" href="http://www.mysql.com/" target="_self">Mysql</a>.</p>
<p>Tenemos dos maneras de resolver ésta situación.</p>
<ol>
<li>Editar el archivo sql y agregarle a mano los comandos necesarios para la creación de la base.</li>
<li>Agregar dos parámetros a nuestro comando mysqldump.</li>
</ol>
<p><span id="more-436"></span>En el primer caso, deberíamos agregar a nuestro archivo, las siguientes instrucciones.</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">DATABASE</span> basededatos<span style="color: #000033;">;</span>
<span style="color: #990099; font-weight: bold;">USE</span> <span style="color: #990099; font-weight: bold;">DATABASE</span> basededatos<span style="color: #000033;">;</span></pre></div></div>

<p>Con esto, el script funcionaría correctamente. Lo malo de ésta forma, es que si tenemos backups muy muy pesados, puede resultar algo engorroso estar editándolos.</p>
<p>Para evitarnos este paso, vamos a cambiar la forma de ejecutar mysqldump.</p>
<p>Lo habitual y más simple para hacer el backup sería ejecutar el comando de ésta forma.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysqldump <span style="color: #660033;">-hhost</span> <span style="color: #660033;">-uusuario</span> <span style="color: #660033;">-ppassword</span> basededatos <span style="color: #000000; font-weight: bold;">&gt;</span> basededatos.sql</pre></div></div>

<p>Como ya dije, esto no nos funcionará correctamente. Así que vamos a sumar algunos parámetros para estar más tranquilos.</p>
<p>Los parámetros en cuestión son:</p>
<ul>
<li>databases</li>
<li>add-drop-database</li>
</ul>
<p>Con databases mysqldump agregará automáticamente las instrucciones de creación y uso de base de datos.</p>
<p>Ahora bien, podría darse que por algún motivo, la base de datos existiera. Para evitar el conflicto, es que agregamos add-drop-database. Con ésto, nos garantizamos que se agregue la instrucción de dropeo de la base de datos antes de la instrucción de creación de la misma.</p>
<p>Nuestro nuevo dump se ejecutaría asi.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysqldump <span style="color: #660033;">--add-drop-database</span> <span style="color: #660033;">--databases</span> <span style="color: #660033;">-hhost</span> <span style="color: #660033;">-uusuario</span> <span style="color: #660033;">-ppassword</span> basededatos <span style="color: #000000; font-weight: bold;">&gt;</span> basededatos.sql</pre></div></div>

<p>Ahora si, cuando volvamos a ejecutar la restauración, nuestra base de datos debería quedar restaurada sin problema alguno.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=436" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2008/08/28/backup-de-bases-de-datos-en-mysql/" title="Backup de bases de datos en Mysql">Backup de bases de datos en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/17/update-con-subselect-en-mysql/" title="Update con Subselect en Mysql">Update con Subselect en Mysql</a></li><li><a href="http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/" title="Restaurar un backup plano en PostgreSql">Restaurar un backup plano en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/04/18/como-crear-un-trigger-con-un-definer-especifico-en-mysql/" title="Cómo crear un trigger con un Definer específico en Mysql">Cómo crear un trigger con un Definer específico en Mysql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2008/10/15/restaurar-backups-de-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restaurar backups de PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 03:01:11 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[backups]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=438</guid>
		<description><![CDATA[Vamos a continuar con las operaciones que deben ser habituales para el mantenimiento de nuestras base de datos. Hasta ahora ya habíamos visto cómo hacer un backup en Postgresql, y también, cómo hacerlo de manera automática. Vamos ahora a la &#8230; <a href="http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vamos a continuar con las operaciones que deben ser habituales para el mantenimiento de nuestras base de datos.</p>
<p>Hasta ahora ya habíamos visto <a title="comando necesario para correr un backup" href="http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/" target="_self">cómo hacer un backup en Postgresql</a>, y también, cómo <a title="automatización de backups desde la consola" href="http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/" target="_self">hacerlo de manera automática</a>.</p>
<p>Vamos ahora a la otra punta del circuito: restaurar una base desde nuestros backups.</p>
<p>El comando que vamos a utilizar (y conocer) es <a title="documentación oficial" href="http://www.postgresql.org/docs/8.3/static/app-pgrestore.html" target="_self">pg_restore</a>.</p>
<p>Si lo aplicara a los ejemplos que antes dí sobre pg_dump, nuestro ejemplo de pg_restore seria el siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg_restore <span style="color: #660033;">-i</span> <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> postgres <span style="color: #660033;">-d</span> mibase <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;/home/damian/backups/mibase.backup&quot;</span></pre></div></div>

<p>Una vez que lo ejecutemos, se nos pedirá la contraseña del usuario que vamos a usar.</p>
<p><span id="more-438"></span>Para conocer los parámetros que podemos pasarle al comando, nada mejor que darse una vuelta por la documentación oficial, ya que hay algún que otro detalle que estaría bueno conocer (y además, porque es buena práctica leer la documentación oficial).</p>
<p>Sobre los parámetros del ejemplo, paso a detallarlos.</p>
<ul>
<li>-i le indica que ignore la versión (entre el comando y la base de datos).</li>
<li>-h localhost es el host de nuestro <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a>.</li>
<li>-p 5432 es la indicación del puerto donde corre el servicio.</li>
<li>-U postgres especifica que se usará el usuario postgres para la operación.</li>
<li>-d mibase es para que realize la restauración sobre una base de datos en particular, en este caso mibase.</li>
<li>-v ejecutará el comando en modo verbose (así podremos ir viendo la salida de cada paso del proceso).</li>
<li>/home/damian/backups/mibase.backup es el archivo que usaremos como backup y que queremos ingresar.</li>
</ul>
<p>Hasta ahora, ya hemos podido realizar backups, automatizarlos, y ahora, ya podremos restaurar nuestras bases de datos desde la consola sin problemas.</p>
<p>Una recomendación para los que estén empezando a conocerse con <a title="sitio oficial" href="http://www.postgresql.org/" target="_self">PostgreSql</a>, es suscribirse a la <a title="lista de correo en español de PostgreSql" href="http://archives.postgresql.org/pgsql-es-ayuda/" target="_self">lista de correo en español</a>.</p>
<p>Es bastante activa, y tiene integrantes ante los cuales hay que sacarse el sombrero, tanto por el conocimiento como por la colaboración que brindan.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=438" width="1" height="1" style="display: none;" /><h2  class="related_post_title">A lo mejor te interese leer</h2><ul class="related_post"><li><a href="http://www.damianculotta.com.ar/2009/06/23/restaurar-un-backup-plano-en-postgresql/" title="Restaurar un backup plano en PostgreSql">Restaurar un backup plano en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/02/15/backup-de-tablas-especificas-en-postgresql/" title="Backup de tablas específicas en PostgreSql">Backup de tablas específicas en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/" title="Automatizar backups de PostgreSql">Automatizar backups de PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/" title="Backup de bases de datos en PostgreSql">Backup de bases de datos en PostgreSql</a></li><li><a href="http://www.damianculotta.com.ar/2009/08/19/simulando-show-tables-y-describe-de-mysql-en-postgresql/" title="Simulando show tables y describe de Mysql en PostgreSql">Simulando show tables y describe de Mysql en PostgreSql</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2008/10/14/restaurar-backups-de-postgresql/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>

