<?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; PostgreSql</title>
	<atom:link href="http://www.damianculotta.com.ar/category/bases-de-datos/postgresql/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>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>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>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>
		<item>
		<title>Cómo obtener el tamaño de una base de datos en PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2008/09/03/como-obtener-el-tamano-de-una-base-de-datos-en-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2008/09/03/como-obtener-el-tamano-de-una-base-de-datos-en-postgresql/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 03:08:00 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=133</guid>
		<description><![CDATA[De repente tu aplicación empezó a funcionar, y la base de datos empieza a crecer. Ahora bien, ¿cómo saber cuánto pesa tu base de datos en PostgreSql?. Bastante fácil, con la siguiente consulta. SELECT pg_database.datname, pg_size_pretty&#40;pg_database_size&#40;pg_database.datname&#41;&#41; AS SIZE FROM pg_database; &#8230; <a href="http://www.damianculotta.com.ar/2008/09/03/como-obtener-el-tamano-de-una-base-de-datos-en-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>De repente tu aplicación empezó a funcionar, y la base de datos empieza a crecer.</p>
<p>Ahora bien, ¿cómo saber cuánto pesa tu base de datos en PostgreSql?. Bastante fácil, con la siguiente consulta.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> pg_database<span style="color: #66cc66;">.</span>datname<span style="color: #66cc66;">,</span> pg_size_pretty<span style="color: #66cc66;">&#40;</span>pg_database_size<span style="color: #66cc66;">&#40;</span>pg_database<span style="color: #66cc66;">.</span>datname<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #993333; font-weight: bold;">FROM</span> pg_database;</pre></div></div>

<p>De ésta forma, conseguimos los tamaños de nuestras bases y vemos algo como lo siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  datname  <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #c20cb9; font-weight: bold;">size</span>
-----------+---------
 template1 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000;">4336</span> kB
 template0 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000;">4248</span> kB
 postgres  <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000;">4336</span> kB</pre></div></div>

<p>Si quisieras obtener el tamaño de alguna base en particular, será cuestión de agregarle la condición y preguntar por el nombre de la base buscada.</p>
<p>Así de rápido termina este pequeño tip.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=133" 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/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/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></ul>]]></content:encoded>
			<wfw:commentRss>http://www.damianculotta.com.ar/2008/09/03/como-obtener-el-tamano-de-una-base-de-datos-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Automatizar backups de PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 13:01:33 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=84</guid>
		<description><![CDATA[Ya vimos cómo hacer un backup en PostgreSql. Ahora, para ahorrarnos tiempo y tener algo más de tranquilidad, vamos a ver cómo automatizar ese proceso. Si por casualidad el primer pensamiento es poner las instrucciones para pg_dump en un script, &#8230; <a href="http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ya vimos cómo hacer un <a title="procedimiento manual para hacer un backup" href="http://www.damianculotta.com.ar/2008/08/24/backup-de-bases-de-datos-en-postgresql/" target="_self">backup en PostgreSql</a>. Ahora, para ahorrarnos tiempo y tener algo más de tranquilidad, vamos a ver cómo automatizar ese proceso.</p>
<p>Si por casualidad el primer pensamiento es poner las instrucciones para <a title="documentación de PostgreSql 8.3" href="http://www.postgresql.org/docs/8.3/static/app-pgdump.html" target="_self">pg_dump</a> en un script, lamento desilusionar. Tendríamos un pequeño problema, y es que el comando se quedará frenado pidiéndonos la contraseña del usuario que quiere hacer el backup.</p>
<p>Como siempre, tenemos una salida.</p>
<p><span id="more-84"></span>Nuestro nuevo mejor amigo en este caso será <a title="el archivo pgpass" href="http://www.postgresql.org/docs/8.3/static/libpq-pgpass.html" target="_self">pgpass</a>.</p>
<p>Pgpass es una variable de entorno.</p>
<p>Este archivo no se crea por defecto, y varía levemente el procedimiento si lo usamos en Linux o en Windows. En ambos casos, el archivo contendrá la misma información:</p>
<p>host:puerto:basededatos:usuario:contraseña</p>
<p><span style="text-decoration: underline;">Caso Windows</span></p>
<p>Para usarlo, debemos crear la carpeta postgresql dentro de c:\documents and settings\(usuario que correrá la tarea)\datos de programa.</p>
<p>Dentro de esa nueva carpeta, pondremos el archivo pgpass.conf.</p>
<p>Ahora si, dentro del archivo, podríamos tener los siguientes parámetros:</p>
<p>192.168.0.1:5432:mibase:miusuario:micontraseña</p>
<p><span style="text-decoration: underline;">Caso Linux</span></p>
<p>En mi ejemplo, el encargado de realizar el backup será nuestro querido <a title="algo así como el Señor de los Anillos en Linux" href="http://es.wikipedia.org/wiki/Root" target="_self">root</a>.</p>
<p>Para que funcione, siempre y cuando tengamos los privilegios, vamos dentro de la carpeta /root y creamos el archivo .pgpass.</p>
<p>Una forma rapida, y presuponiendo que estamos logueados como root, sería la siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;192.168.0.1:5432:mibase:miusuario:micontraseña&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> ~<span style="color: #000000; font-weight: bold;">/</span>.pgpass</pre></div></div>

<p>Si todo salió bien, ya tenemos creado el archivo.</p>
<p>¿Y ahora?.</p>
<p>Bueno, ya tenemos resuelto el detalle de la contraseña. Ahora, simplemente, creamos un archivo que será el que vamos a programar para que se ejecute automaticamente y nos realize el backup.</p>
<p>Dentro de nuestro script pondremos el comando:</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> 192.168.0.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">5432</span> <span style="color: #660033;">-U</span> miusuario <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>Ahora cuando el script necesite la contraseña para conectarse, la tomará del Pgpass&#8230; y asunto resuelto.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=84" 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/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/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/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/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/08/26/automatizar-backups-de-postgresql/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Backup de bases de datos en PostgreSql</title>
		<link>http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/</link>
		<comments>http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 16:00:28 +0000</pubDate>
		<dc:creator>Damián</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[PostgreSql]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.damianculotta.com.ar/?p=58</guid>
		<description><![CDATA[Un tema, para nada olvidable, es el de los backups. Lo siguiente, es la descripción de cómo podemos lograr un dump nuestro PostgreSql desde la línea de comandos. pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v &#8230; <a href="http://www.damianculotta.com.ar/2008/08/25/backup-de-bases-de-datos-en-postgresql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Un tema, para nada olvidable, es el de los backups.</p>
<p>Lo siguiente, es la descripción de cómo podemos lograr un dump nuestro PostgreSql desde la línea de comandos.</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>Ahora bien, empezemos a ver qué estamos haciendo y con que nos estamos encontrando.</p>
<p><span id="more-58"></span>En primer lugar, cuando querramos ejecutar este comando, nos va a pedir la contraseña para el usuario con el cual lo estamos queriendo ejecutar (usuario postgres en este caso). Entonces, ingresamos la contraseña, Enter, y comienza el proceso.</p>
<p>Prestemos atención al comando completo:</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>Veamos qué significan cada uno de los parametros que estamos indicando.</p>
<ul>
<li>pg_dump es el comando en si mismo.</li>
<li>-i le indica que ignore la versión (entre el comando y la base de datos).</li>
<li>-h localhost especifica el host del motor de base de datos (localhost en este caso).</li>
<li>-p 5432 es la indicación del puerto donde corre el servicio.</li>
<li>-U postgres es para indicarle que usaremos el usuario postgres.</li>
<li>-F indica el formato de salida.</li>
<li>c es la elección del formato (comprime en este caso).</li>
<li>-b indica que vuelque los LO (large objects).</li>
<li>-v verbose.</li>
<li>-f es el archivo de salida.</li>
<li>/home/damian/backups/mibase.backup es el nombre para el archivo de salida (con path).</li>
<li>mibase es el nombre de la base a backupear.</li>
</ul>
<p>De mas está aclarar, que siempre debemos recurrir a la fuente, así que nada mejor que visitar 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>.</p>
<p>A manera de yapa, si en lugar de utilizar Linux, aplicamos el ejemplo en Windows, habrá que hacerle los siguientes arreglos al comando:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">C:\Archivos de programa\PostgreSQL\8.3\bin\pg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -v -f &quot;C:\mibase.backup&quot; mibase</pre></div></div>

<p>Nótese que fue necesario indicar el path completo al binario.</p>
 <img src="http://www.damianculotta.com.ar/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=58" 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/26/automatizar-backups-de-postgresql/" title="Automatizar backups de PostgreSql">Automatizar backups de PostgreSql</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/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/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/08/25/backup-de-bases-de-datos-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

