plpgsql para corrigir o “nextId” em bases PostgreSQL (conserta as sequences)

CREATE OR REPLACE FUNCTION "public"."fixsequence"()
 RETURNS "pg_catalog"."int2" AS $BODY$declare v_reg record;
v_sql varchar;
i_count int;
BEGIN
 i_count := 0;

       for v_reg in (
               select t.table_name, c.column_name, t.table_schema, s.sequence_name
               from information_schema.tables t
               inner join information_schema.columns c on
                  c.table_catalog = t.table_catalog and
                  c.table_schema = t.table_schema and
                  c.table_name = t.table_name and
                  c.column_name = 'id'
               inner join information_schema.sequences s on
                  t.table_catalog = s.sequence_catalog and
                  t.table_schema = s.sequence_schema and
                  lower(s.sequence_name) = lower(t.table_name || '_id_seq')
       ) loop
               v_sql := 'SELECT setval(''"'|| v_reg.table_schema || '"."' || v_reg.sequence_name || '"'', (SELECT max("'|| v_reg.column_name ||'")+1 FROM "'||v_reg.table_schema||'"."' || v_reg.table_name || '"))';
               execute v_sql;
               i_count := i_count +1;
       end loop;
       RETURN i_count;
END
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;

Obs.: Note que ali onde tem “c.column_name = ‘id'”, “id” se refere a chave primária de suas tabelas 😉

Retirado de: http://www.danielpk.com.br/blog/2010/04/08/corrigir-as-sequences-do-postgres/comment-page-1/#comment-7822

Dump de MySQL (UTF-8) para PostgreSQL(ISO-8859-1)

Esses dias tive de migrar uma base MySQL(UTF-8) para PostgreSQL(ISO-8859-1), talvez isto possa lhe ajudar:

1º: Dump da base MySQL (com compatibilidade com postgres)

mysqldump --compatible=postgresql -uroot base_de_dados_mysql -hlocalhost -p > dump_base_de_dados_mysql.sql

2º: Fazer uns ajustes nas aspas (eu tive de fazer isso manualmente…) e remover uns “lixos”

vim base_de_dados_mysql.sql

e então:
1- :%s/\\"/""/g
2- :%s/\\'/''/g
3- :%s/\\r\\n/<br \/>/g
4- :%s/\\n/<br \/>/g
5- :%s/^SET.\+//g
6- :%s/^LOCK.\+//g
7- :%s/^UNLOCK.\+//g
9- :%s/mediumtext/text/g
12- :%s/int([0-9]\+)/int/g

Obs.: Confira os auto_increment.

3º: Converter os dados para iso:

iconv -f utf-8 -t iso-8859-1 dump_base_de_dados_mysql.sql &gt; dump_base_de_dados_psql.sql

Pra mim deu conta do recado, qualquer coisa, comente!