Thread: sql script confusion

sql script confusion

From
Sim Zacks
Date:
I am in the process of testing PostGreSQL for our sales and product
database and I am a little confused about SQL scripting and various
available languages. (My background is mostly MSSQL Server).

I am using the PGAdmin tool and I would like to write a script to
update all sequences to the current max value in the table.

Do I need to use a specific language in a function to do this or does
it work as native SQL, as it would in T-SQL?

What I would like to do is something like -
(pseudo code)
declare cursor for select relname from pg_statio_user_sequences
open cursor
fetch next into var_relname
while not cursor.eof
      set var_tblname=substring(var_relname, "0 until _")
      set var_fieldname=substring(var_relname,"first _ until 2nd _")
      select var_maxID=max(var_fieldname) from var_tblname
      ALTER SEQUENCE var_relname
            RESTART WITH var_maxID+1;
      fetch next into var_relname
end loop

Can dynamic statements be written in "raw sql" or do they need to be
encompassed in a language? Do all language scripts have to be
functions or can I do something like:
Start Language Processing Here
...Code
End Language Processing


Thank You
Sim Zacks
IT Manager
CompuLab
04-829-0145 - Office
04-832-5251 - Fax


Re: sql script confusion

From
Richard Huxton
Date:
Sim Zacks wrote:
> Do I need to use a specific language in a function to do this or does
> it work as native SQL, as it would in T-SQL?

You need to use a specific language.

> What I would like to do is something like -
> (pseudo code)
> declare cursor for select relname from pg_statio_user_sequences
> open cursor
> fetch next into var_relname
> while not cursor.eof
>       set var_tblname=substring(var_relname, "0 until _")
>       set var_fieldname=substring(var_relname,"first _ until 2nd _")
>       select var_maxID=max(var_fieldname) from var_tblname
>       ALTER SEQUENCE var_relname
>             RESTART WITH var_maxID+1;
>       fetch next into var_relname
> end loop

For this plpgsql might be a good choice. Think sql with a few
loop/control structures and variables.

> Can dynamic statements be written in "raw sql" or do they need to be
> encompassed in a language? Do all language scripts have to be
> functions or can I do something like:
> Start Language Processing Here
> ...Code
> End Language Processing

You need to create a function and then call it. You can create dynamic
SQL as a string and then EXECUTE it with plpgsql. The other languages
offer various ways too.

--
   Richard Huxton
   Archonet Ltd