DATA no PostgreSQL – Brincando com funções

Agradecimento por estas excelentes dicas ao autor original: savepoint.blog.br

Savepoint

Após brincar de inserir e exibir datas e de fazer um pouco de aritimética com datas, chegou a hora de trabalhar com problemas mais complexos. Se você tiver alguma sugestão para um 4º ou até 5º post, deixe um comentário aqui.

Nesse ponto, você já deveria se sentir mais à vontade trabalhando com datas no PostgreSQL. Lembre-se sempre de consultar o capítulo 8 – “Data Types” e o capítulo 9 – “Functions and Operators” para conhecer um pouco mais sobre os tipos de dados disponíveis e as funções existentes para lidar com eles. Para hoje vamos fazer uma brincadeira simples com datas: vamos pegar o primeiro e o último dia útil do mês atual. Antes de mais nada, RTFM…. vá dar uma lida no manual para conhecer as funções do Postgres. Quanto mais eu releio a documentação, mais eu aprendo.

Mas vamos lá. Para começar, vamos pegar o…

Ver o post original 847 mais palavras

Anúncios

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!