Un script bash para actualizar secuencias en una base de datos

From: alejandro <alejandro(at)redcetus(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Un script bash para actualizar secuencias en una base de datos
Date: 2006-04-02 02:14:15
Message-ID: 442F3377.1080306@redcetus.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estimados amigos:

Cuando estamos en desarrollo cargando datos desde scripts, surgen (a
veces) incompatibilidades con los secuenciadores y los datos que hacen
referencia a éstos.
Quizá este script ayude a quienes tienen ese problema.

Un abrazo.

--
#!/bin/sh
#
# Regenera los secuenciadores de una base de datos en base
# a las llaves primarias que los utilicen
# Elaborado por Alejandro Salamanca <asalamanca(at)redcetus(dot)com>
# RedCetus SRL 2006

# Se verifica que exista el parámetro con el nombre de una base de datos
if [ "$1" = "" ]
then
echo Como parámetro se deberá incluir el nombre de la base de datos a
procesar.
psql -l|grep -v '('|grep $USER|cut -d\| -f1
exit
fi

# Se verifica que exista la base de datos
table=''
for i in `psql -l|grep -v '('|grep $USER|cut -d\| -f1`
do
if [ "$i" = "$1" ]
then
table=$1
fi
done;
if [ "$table" = "" ]
then
echo La base de datos $1 no existe. Por favor, verifique el nombre.
psql -l|grep -v '('|grep $USER|cut -d\| -f1
exit
fi

# Se procesa la base de datos
echo "\echo Procesando base de datos $table"|psql $table
query="SELECT 'select lpad( \''
|| c.relname
|| '\', 30, \' \') as \"(col)\", replace( setVal(\''
|| replace( substring(adef.adsrc,'\'[^\']*\''), '\'', '' )
|| '\', ( select max( '
|| a.attname
|| ' ) from '
|| c.relname
|| ' ), true ), \' \', \'\' ) as num;' as autosecuences
FROM
pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef ON
a.attrelid=adef.adrelid AND a.attnum=adef.adnum
LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid
LEFT JOIN pg_catalog.pg_class c ON a.attrelid=c.oid
WHERE
adsrc like '%nextval%'
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attname;
"
echo $query | psql $table | grep 'select' | psql $table | grep -v '('
|grep -v '+'|grep '|'|sed 's/|/=/'

--
Alejandro Salamanca
Gerente de Desarrollo/Development Manager
RedCetus S.R.L
Of.: (+591) 2-2410521/(+591) 2-2118123
Cell: (+591) 70618872
www.redcetus.com
Servicios: Aplicaciones e Instalaciones Linux
Telefonia de Voz sobre IP
Desarrollo de Aplicaciones en Linea
Partners: www.astaro.com (Security Gateways)
www.vmware.com (Servidores Virtuales)
www.digium.com (Telefonia VoIP)
www.bicomsystems.com (VoIP PBXWare)

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Soto Cordones - Venezuela 2006-04-02 14:14:10 Re: AYUDA CON ODBC DE POSTGRESQL PARA VISUAL BASIC 6.0
Previous Message Edwin Quijada 2006-04-01 21:53:21 Re: Listar columnas de una tabla.