Re: [SQL] connectby documentation

2006-03-14 Thread Jean-Paul Argudo
Daniel Caune a écrit :
> Wow, that was the quest for the Holy Grail! :-)

Yes I understand. That kind of documentation for a
contrib-addon-whatever for PostgreSQL can be tricky sometimes to find..


I just jump on that thread to place a reminder for all those wanting to
implement trees in databases, just in case they are still thinking about
howto do that.

I wroted an article on that topic (in french only sorry :
http://www.postgresqlfr.org/?q=node/142), where I compare id/parent_id,
nested loops and Miguel Sofer's method.

This method is explained on OpenACS forums (in english)

http://openacs.org/forums/message-view?message_id=18365

The original work of Miguel Sofer (with a PostgreSQL implementation as
an example) can be found here:

http://www.utdt.edu/~mig/sql-trees/

Be sure to download the tar.gz. on the like "here"... and read his draft.

I'm really convinced this method is the best so far. I used it in 3
different projects where I had to implement big trees structures on a
table. They all still work with no problem of any kind.

Just to let you know in case you missed that ;-)

My 2 ¢

--
Jean-Paul Argudo
www.Argudo.org
www.PostgreSQLFr.org

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [SQL] connectby documentation

2006-03-14 Thread Achilleus Mantzios
O Jean-Paul Argudo έγραψε στις Mar 14, 2006 :

> Daniel Caune a ιcrit :
> > Wow, that was the quest for the Holy Grail! :-)
> 
> Yes I understand. That kind of documentation for a
> contrib-addon-whatever for PostgreSQL can be tricky sometimes to find..
> 
> 
> I just jump on that thread to place a reminder for all those wanting to
> implement trees in databases, just in case they are still thinking about
> howto do that.
> 
> I wroted an article on that topic (in french only sorry :
> http://www.postgresqlfr.org/?q=node/142), where I compare id/parent_id,
> nested loops and Miguel Sofer's method.
> 
> This method is explained on OpenACS forums (in english)
> 
> http://openacs.org/forums/message-view?message_id=18365
> 
> The original work of Miguel Sofer (with a PostgreSQL implementation as
> an example) can be found here:
> 
> http://www.utdt.edu/~mig/sql-trees/
> 
> Be sure to download the tar.gz. on the like "here"... and read his draft.
> 
> I'm really convinced this method is the best so far. I used it in 3
> different projects where I had to implement big trees structures on a
> table. They all still work with no problem of any kind.

I agree, this genealogical approach is i think the most 
intuitive/efficient, however this depends on the nature
of the intented operation types.

One implementation of this (i think) is the ltree contrib module.
Haven't worked with this tho.

What i actually did for my ultra demanding task (modeling inventory 
maintenance of 709772 machinery items/parts etc... of ~ 40 vessels), was 
smth of the type

defid   | integer| not null default 
nextval('public.machdefs_defid_seq'::text)
parents | integer[]  |
description | text   |
machtypeid  | integer  
..

where parents hold the path from the item's direct parent to its root 
ancestor,
and tree queries are done with a help of a intarray index on parents
"machdefs_parents" gist (parents gist__intbig_ops)

> 
> Just to let you know in case you missed that ;-)
> 
> My 2 ’
> 
> --
> Jean-Paul Argudo
> www.Argudo.org
> www.PostgreSQLFr.org
> 
> ---(end of broadcast)---
> TIP 4: Have you searched our list archives?
> 
>http://archives.postgresql.org
> 

-- 
-Achilleus


---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [SQL] Copying a row within table

2006-03-14 Thread george young
Assuming the sequence in foo is named foo_seq, you could do:

-- You could also select multiple rows here, e.g. foo_id>10, if desired.
create temp table foo_tmp as select * from foo where foo_id=2;
alter table foo_tmp add column tmp_seq int default nextval('foo_seq');
-- foo_tmp now *shares* the sequence.
insert into foo select * from foo_tmp;
drop table foo_tmp;

If there's any chance of concurrent update/insert/deletes to foo, you
might should wrap this in a (begin; stuff; commit) transaction.

-- George Young

On Tue, 14 Mar 2006 09:19:49 +0200
Aarni Ruuhimäki <[EMAIL PROTECTED]> threw this fish to the penguins:
> 
> testing=# INSERT INTO foo (SELECT * FROM foo WHERE foo_id = 2);
> ERROR:  duplicate key violates unique constraint "foo_pkey"
> testing=#
> 
> testing=# INSERT INTO foo (foo_1, foo_2, foo_3 ...) (SELECT foo_1, foo_2, 
> foo_3 ... FROM message_table WHERE foo_id = 10);
> INSERT 717286 1
> testing=#
> 
> Is there a fast way to copy all but not the PK column to a new row within the 
> same table so that the new foo_id gets its value from the sequence ?
> 
> TIA and BR,
> 
> Aarni
> 
> -- 
> Aarni Ruuhimäki
> --
> This is a bugfree broadcast to you
> from **Kmail**
> on **Fedora Core** linux system
> --
> 
> ---(end of broadcast)---
> TIP 4: Have you searched our list archives?
> 
>http://archives.postgresql.org
> 


-- 
"Are the gods not just?"  "Oh no, child.
What would become of us if they were?" (CSL)

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


[SQL] how to get the size of array?

2006-03-14 Thread Emi Lu

Hello,

Is there a way that I can get the size of one array ?

For example, create table test (id varchar[]);
insert into test values('{}');
insert into test values('{1, 2, 3}');

I am looking for something like :
  select sizeOf(id) as size from test;


so that I can get results like:
size
---
0
3

Thanks a lot,
Ying


---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
  subscribe-nomail command to [EMAIL PROTECTED] so that your
  message can get through to the mailing list cleanly


Re: [SQL] how to get the size of array?

2006-03-14 Thread Andreas Kretschmer
Emi Lu <[EMAIL PROTECTED]> schrieb:

> Hello,
> 
> Is there a way that I can get the size of one array ?

Yes: http://www.postgresql.org/docs/8.1/interactive/functions-array.html

HTH, Andreas
-- 
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.  (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."(unknow)
Kaufbach, Saxony, Germany, Europe.  N 51.05082°, E 13.56889°

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


[SQL] Savepoint/Rollback in functions

2006-03-14 Thread Scott Petersen

I am running postgres 8.1.2 on both a windows and Linux platform.

The primary method of managing business logic is through the use of 
functions.  Our primary access to the database is by using PSQL (pg/psql).


The problem that I am having is that we need to execute and implement 
"SAVEPOINT" and "ROLLBACK" functionality inside of FUNCTIONS.  The 
"SAAVEPOINT/ROLLBACK" works fine interactively.  At the present time the 
documentation does not seem to be definitive on the functionality of 
this, BUT, we placed "SAVEPOINT/ROLLBACK" commands in a test function 
and the function failed.


Question 1:  does pg/psql functions allow "SAVEPOINT/ROLLBACK" 
functionality? (if so how?)


Question 2:  if the answer to question 1 is "NO", what would be required 
to get this implemented in the standard product?


Thanks in advance for any information and help.

Scott.

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [SQL] Savepoint/Rollback in functions

2006-03-14 Thread Alvaro Herrera
Scott Petersen wrote:

Hi,

> Question 1:  does pg/psql functions allow "SAVEPOINT/ROLLBACK" 
> functionality? (if so how?)

Yes.  However, you cannot use that syntax directly.  You rather use it
by establishing EXCEPTION clauses in BEGIN/END blocks.  Upon entering
any BEGIN/END block which has an EXCEPTION clause, an implicit SAVEPOINT
is executed.  If any exception (read: error) is found while executing
the block, the savepoint will be automatically rolled back and control
passed to the EXCEPTION block.

HTH,

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [SQL] Copying a row within table

2006-03-14 Thread John DeSoi


On Mar 14, 2006, at 2:19 AM, Aarni Ruuhimäki wrote:

testing=# INSERT INTO foo (foo_1, foo_2, foo_3 ...) (SELECT foo_1,  
foo_2,

foo_3 ... FROM message_table WHERE foo_id = 10);
INSERT 717286 1
testing=#

Is there a fast way to copy all but not the PK column to a new row  
within the

same table so that the new foo_id gets its value from the sequence ?



Here is an example using a plpgsql function:

create or replace function test_duplicate (p_id integer)
returns integer as $$
declare
tt test%rowtype;
begin
select into tt * from test where id = p_id;
tt.id := nextval(pg_get_serial_sequence('test', 'id'));
insert into test values (tt.*);
return tt.id;
end;
$$ language plpgsql;






John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL


---(end of broadcast)---
TIP 4: Have you searched our list archives?

  http://archives.postgresql.org