GoSane ?

Ça faisait un petit moment que je voulais séparer mes activités pro et perso. J’ai maintenant deux noms de domaine distincts : thefreecat.org pour tout ce qui est pro et gosane.fr pour ce que je fais en dehors.

Ce nom fait référence aux ouvrages de science fiction Le cycle du Ā d’A.E. Van Vogt.

PostgreSQL : changer le propriétaire d’une base de données

Une méthode un peu bourrine mais qui marche.

  • Se connecter à la base de données voulue
  • copier/coller les lignes suivantes en changeant newuser et éventuellement public.
\t\a
\o /tmp/hack.sql
select 'ALTER '
||CASE WHEN relkind='r' THEN 'TABLE' WHEN relkind='S' THEN 'SEQUENCE' WHEN relkind='v' THEN 'VIEW' END ||' '||relname||' OWNER TO newuser;'
from pg_class c
join pg_namespace ns ON ns.oid=c.relnamespace
where relkind in ('r','S','v')
and ns.nspname='public'
ORDER BY CASE WHEN relkind='r' THEN 1 ELSE 2 END;
\o
\i /tmp/hack.sql
  • Le ORDER BY est nécessaire pour que les tables soient traitées avant les séquences

Pour remplacer postgres par newuser comme propriétaire de toutes les fonctions “possédées” par postgres :

\t\a
\o /tmp/hack.sql
SELECT 'ALTER FUNCTION '
|| format('%I.%I(%s)', n.nspname, p.proname, oidvectortypes(p.proargtypes))
||' OWNER TO newuser;'
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
AND n.nspname NOT IN ('pg_catalog','information_schema')
AND pg_catalog.pg_get_userbyid(p.proowner)='postgres';
\o
\i /tmp/hack.sql

Enjoy !

UTF8 et Perl

Je ne suis vraiment pas doué avec UTF8 et Perl. Un coup ça marche, un coup non… Des années que je perds des heures à essayer des trucs différents.

Là j’ai un résultat qui a l’air de marcher, jusqu’à la prochaine fois :

#!/usr/bin/perl -w

use DBI;
use Encode;
use utf8;
use open ':utf8'; 
binmode STDOUT, ":utf8"; 

my $dbh = DBI->connect("DBI:Pg:dbname=madb;host=localhost","monuser","motdepasse") ;
$dbh->prepare("SET NAMES 'utf8'")->execute;
$dbh->{pg_enable_utf8}=1;

Sinon, un truc idiot pour être sûr qu’on produit bien de l’UTF8 :

perl monscript.pl >x && file x
x: UTF-8 Unicode text

Un truc à ne pas oublier (issu de la bible) :

When you encode, the resulting UTF8 flag is always off.

When you decode, the resulting UTF8 flag is on–unless you can unambiguously represent data.