IT Base of Knowledge’s Weblog

September 25, 2008

Grant rights on many tables

Filed under: Database, PostgreSQL — itbdc @ 1:58 pm
-- pgx_grant(PRIVILEGE, TABLES, USER)
--  Grants PRIVILEGE to USER on objects like TABLES%
--  Grants to tables, views and sequences.
--
CREATE FUNCTION pgx_grant(text,text,text) returns int4 as '
DECLARE
  priv ALIAS FOR $1;
  patt ALIAS FOR $2;
  user ALIAS FOR $3;
  obj  record;
  num  integer;
BEGIN
  num:=0;
  FOR obj IN SELECT relname FROM pg_class
  WHERE relname LIKE patt || \'%\' AND relkind in (\'r\',\'v\',\'S\') LOOP
    EXECUTE \'GRANT \' || priv || \' ON \' || obj.relname || \' TO \' || user;
    num := num + 1;
  END LOOP;
  RETURN num;
END;
' language 'plpgsql';

September 24, 2008

Create a multi tar with specified size

Filed under: Bash — itbdc @ 9:45 am

Create a tar file:

tar cvf - gaim/ | split -b 1024k - gaim.tar
ll gaim.tar*
-rw-r--r--    1 root     root      1048576 Jan 29 16:57 gaim.taraa
-rw-r--r--    1 root     root      1048576 Jan 29 16:57 gaim.tarab
-rw-r--r--    1 root     root      1048576 Jan 29 16:57 gaim.tarac
-rw-r--r--    1 root     root      1048576 Jan 29 16:57 gaim.tarad
-rw-r--r--    1 root     root      1048576 Jan 29 16:57 gaim.tarae
-rw-r--r--    1 root     root       225280 Jan 29 16:57 gaim.taraf

To read it :

cat gaim.tar* | tar tvf -

SIZE may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z,Y.

My first plpgsql function

Filed under: Database, PostgreSQL — itbdc @ 9:17 am

At first you need to declare language :

$ createlang plpgsql database

Then connect on postgres :

database=# CREATE FUNCTION a_function () RETURNS int4 AS '
database'# DECLARE
database'# an_integer int4;
database'# BEGIN
database'#    an_integer := 10 * 10;
database'#    return an_integer;
database'# END;
database'# ' LANGUAGE 'plpgsql';

Your first function is now created. You can use it like this :

SELECT a_function() AS output;

Here an exemple of a function :

CREATE OR REPLACE FUNCTION b_function() RETURNS SETOF TEXT AS '
DECLARE
    element_id int4;
    elmt_id0 int4;
    elmt_id1 int4;
    element record;
    output text;
    cur_element CURSOR for SELECT * FROM element;
BEGIN
    OPEN cur_element;
    LOOP
        FETCH cur_element INTO element_id, elmt_id0, elmt_id1;
        IF NOT FOUND THEN
            EXIT;
        END IF;
        DELETE FROM alpha WHERE element_id=element_id;
        DELETE FROM country WHERE element_id=element_id;
        FOR element in SELECT * FROM element WHERE elmt_id=elmt_id0 OR elmt_id=elmt_id1 LOOP
            output := element.element_home_dir || element.element_uri;
            return next output;
        END LOOP;
    END LOOP;
    CLOSE cur_element;
    RETURN;
END;
' LANGUAGE 'plpgsql';
SELECT * from b_function() GROUP BY b_function;

September 8, 2008

Hashes of hashes

Filed under: Perl — itbdc @ 4:17 pm

#!/usr/bin/perl
use strict;
my %toto;
$toto{3}{4} = 'jj';
my $un;
my $deux;

foreach $un (keys %toto) {
foreach $deux (keys %{$toto{$un}} ) {
print $toto{$un}{$deux}."\n";
}
}

Blog at WordPress.com.