in reply to Help on selecting and deleting many records in a DB.

The faster answer for complex queries is always to define a SQL function (this can be done in PL/PERL).
  • Comment on Re: Help on selecting and deleting many records in a DB.

Replies are listed 'Best First'.
Re^2: Help on selecting and deleting many records in a DB.
by erix (Prior) on Apr 05, 2014 at 17:51 UTC

    Can you explain? I don't understand why "a SQL function" would do anything to make this faster, or even easier in any way.

    (Btw, in postgres, "SQL function" normally means a function written in SQL, i.e. a PL/SQL function [1] (as opposed to a PL/pgSQL function [2] (or PL/Perl [3], PL/Tcl, PL/Python, etc)).

    [0] Server Programming

    [1] PL/SQL

    [2] PL/pgSQL

    [3] PL/Perl

    ).

      Creating a function for your needs can be as simple as:

      1. Write this code in a file called myfun.test:

      CREATE OR REPLACE PROCEDURAL LANGUAGE plperlu; ALTER PROCEDURAL LANGUAGE plperlu OWNER TO postgres; CREATE OR REPLACE FUNCTION mytest(text) RETURNS text LANGUAGE plperlu AS $_X$ my $data = $_[0]; my $string = $data." -->from mytest\n"; return $string; $_X$;

      (Of course you can have as many arguments and return types you want in your function's definition.)

      2. Insert/replace this function in your db by issuing the command line:

      # \i /path/to/myfun.test

      3. Run the test (given a table called data and a text field called f1):

      # select mytest(f1) from data limit 10

      And that's it... When your function will be ready you can dump/restore it permanently into your db if you want.

        I seems rather more complicated, not easier. In what way does this make the queries faster? Benchmark?

      If you kown exactly what you do and don't have to experiment a little, and love to type long command lines in SQL, sure everything can be done there. It's clear that with your level of awareness, such things don't bother you. There are other reasons - like subsequent functions calls can dispense from nested requests, but I have no time to go in detail. Cheers!