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)
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. |