Обсуждение: LOCK command inside a TRANSACTION
I need Postgresql somehow does this for me:
- if an user query a select on a table, the rows of the table in the result of this select can not be updated or deleted by another user until this one update, delete or discard the changes on those rows.
I've found something about the LOCK command inside a TRANSACTION but I didn't see how I could do that yet.
Does anybody have any ideas?
Compels Informática
Santa Rita do Sapucaí - MG
Brazil
www.compels.net
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
<div class="Section1"><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">I have created a view, called april_may. I need to select this view by combineingto fields in the database to create the view name etc …</span></font><p class="MsoNormal"><font color="navy" face="Arial"size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy"> </span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">Create view as select * from table_X;</span></font><p class="MsoNormal"><font color="navy"face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy"> </span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">I need to do something like this … </span></font><p class="MsoNormal"><font color="navy"face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy"> </span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">Select * from (select table.start_month||_||table.end_month);</span></font><p class="MsoNormal"><fontcolor="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">==================</span></font><p class="MsoNormal"><font color="navy" face="Arial"size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">Start_month = april</span></font><p class="MsoNormal"><font color="navy" face="Arial"size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">End_month = May</span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><spanstyle="font-size: 10.0pt;font-family:Arial;color:navy"> </span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">What I what to pass to the select is the combination of the 2 fields as the view name.</span></font><pclass="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy"> </span></font><p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10.0pt;font-family:Arial;color:navy">Any ideas ?</span></font></div>
am Tue, dem 03.04.2007, um 9:04:00 -0400 mailte Wilkinson, Jim folgendes: > I have created a view, called april_may. I need to select this view by > combineing to fields in the database to create the view name etc ? Please, no answer to an other mail and change the subject to a new subject. Your mail sorted in the wrong thread. > Select * from (select table.start_month||_||table.end_month); > > ================== > > Start_month = april > > End_month = May > > > > What I what to pass to the select is the combination of the 2 fields as the > view name. Perhaps with a function that receive start and end and returns the result as a table (set-returning function) Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
Wilkinson, Jim wrote: > I have created a view, called april_may. I need to select this view by > combineing to fields in the database to create the view name etc ... Jim Learn to use "compose" or "write" and not "reply" when you want to ask a fresh question. My email rolled this into the "LOCK" thread making it incredibly difficult to find. > > > > Create view as select * from table_X; > > > > I need to do something like this ... > > > > Select * from (select table.start_month||_||table.end_month); > > ================== > > Start_month = april > > End_month = May > > > > What I what to pass to the select is the combination of the 2 fields as > the view name. > > > > Any ideas ? The simple ways I can think of are external to postgresql, and depend on your host environment. For example, on Linux (or OS X) I might do something like this: psql -c "select * from (select table.$(date +%B -d 'last month')_table.$(date +%B))" Note, the above para is really a single line, there is a space between "last" and "month." on DOS it might be a little trickier, but probably VB Script can do it. In Java, it is somewhat similar but different. If this doesn't answer, give better info and maybe someone else can help you properly.
Am Dienstag, 3. April 2007 14:48 schrieb Carlos Santos: > - if an user query a select on a table, the rows of the table in the result > of this select can not be updated or deleted by another user until this one > update, delete or discard the changes on those rows. Sounds like SELECT FOR UPDATE. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Jim<br /><br /> My initial reaction is what are you trying to achieve? Surely you could have one underlying table withdates in it and<br /><br /> SELECT * from mytable WHERE date1>='2007/04/01' AND date2<='2007/05/01';<br /><br />but otherwise, like John, I would use an external scripting language to create the table name.<br /><br /> Hilary<br /><br/> At 14:04 03/04/2007, Wilkinson, Jim wrote:<br /><br /><blockquote cite="" class="cite" type="cite"><font color="#000080"size="2">I have created a view, called april_may. I need to select this view by combineing to fields inthe database to create the view name etc <br /> <br /> Create view as select * from table_X;<br /> <br /> I need todo something like this <br /> <br /> Select * from (select table.start_month||_||table.end_month);<br /> ==================<br/> Start_month = april<br /> End_month = May<br /> <br /> What I what to pass to the select is thecombination of the 2 fields as the view name.<br /> <br /> Any ideas ?</font></blockquote><p> Hilary Forbes<br /> DMRLimited (UK registration 01134804) <br /> A DMR Information and Technology Group company (<a eudora="autourl" href="http://www.dmr.co.uk/"><fontcolor="#0000FF"> <u>www.dmr.co.uk</u></font></a>) <br /> Direct tel 01689 889950 Fax 01689860330 <br /> DMR is a UK registered trade mark of DMR Limited<br /> **********************************************************
Jim<br /><br /> So let's suppose you have a "master" table of incidents<br /><br /> incident_no (serial)<br /> incident_date(timestamp)<br /> other fields<br /><br /> My understanding is that you now want to eg count the incidents startingin a given month and going forwards for 12 months, grouping the results by month. Have I understood the problem?<br/><br /> If so here goes:<br /><br /> Set up a table hftest<br /><br /> incident serial<br /> incdate timestamp<br/><br /> SELECT * from hftest;<br /> incident | incdate<br /> ----------+---------------------<br /> 1000 | 2006-05-03 00:00:00<br /> 1001 | 2006-04-03 00:00:00<br /> 1002 | 2006-04-01 00:00:00<br /> 1003| 2006-12-08 00:00:00<br /> 1004 | 2007-02-28 00:00:00<br /> 1005 | 2007-08-03 00:00:00<br /><br /> Now:<br/> SELECT max(to_char(incdate,'Mon')) ,count(incident) from hftest WHERE date_trunc('month',incdate) >='2006/04/01'AND date_trunc('month',incdate)<=date_trunc('month',date '2006/04/01' + interval '12 months') GROUP BYdate_trunc('month',incdate) ORDER BY date_trunc('month',incdate);<br /> max | count<br /> -----+-------<br /> Apr | 2<br /> May | 1<br /> Dec | 1<br /> Feb | 1<br /> <br /> which is almost what you want. To get themissing months with zeroes, I think you probably need a table of months and to use a left outer join but you may havefound a better way by now!<br /><br /> Now I have NO idea on the efficiency of this as I rather suspect all those date_truncfunctions may have an adverse effect!<br /><br /> Best regards<br /> Hilary<br /> <br /><br /><br /><br /><br/><br /><br /> At 16:44 03/04/2007, you wrote:<br /><br /><blockquote cite="" class="cite" type="cite"><font color="#000080"size="2">Hi Hilary, <br /> I am trying to produce reports where the user can select a different fiscal yearstarting month. From this I would select the correct table view to produce the reports in the correct month order bycolumn<br /> <br /> Select * from table_view;<br /> <br /> Incident April May June July Aug .<br /> ===============================================<br /> Falls 1 0 1 0 0<br /> .<br /> .<br /> .<br /> .<br /> <br /> Can you think of another way to do this ?<br/> <br /> <br /><hr /><div align="center"></div></font> <font face="Tahoma" size="2"><b>From:</b> Hilary Forbes [<aeudora="autourl" href="mailto:hforbes@dmr.co.uk"> mailto:hforbes@dmr.co.uk</a>] <br /><b>Sent:</b> April 3, 2007 10:14AM<br /><b>To:</b> Wilkinson, Jim; pgsql-sql@postgresql.org<br /><b>Subject:</b> Re: [SQL] Using a variable as a viewname in a select<br /></font><font face="Times New Roman, Times"> <br /> Jim<br /><br /> My initial reaction is whatare you trying to achieve? Surely you could have one underlying table with dates in it and<br /><br /> SELECT * frommytable WHERE date1>='2007/04/01' AND date2<='2007/05/01';<br /><br /> but otherwise, like John, I would use anexternal scripting language to create the table name.<br /><br /> Hilary<br /><br /> At 14:04 03/04/2007, Wilkinson, Jimwrote:<br /><br /><br /></font><font color="#000080" face="Times New Roman, Times" size="2">I have created a view, calledapril_may. I need to select this view by combineing to fields in the database to create the view name etc <br /> <br /> Create view as select * from table_X;<br /> <br /> I need to do something like this <br /> <br /> Select *from (select table.start_month||_||table.end_month);<br /> ==================<br /> Start_month = april<br /> End_month= May<br /> <br /> What I what to pass to the select is the combination of the 2 fields as the view name.<br /> <br /> Any ideas ?<br /></font><br /><font face="Times New Roman, Times">Hilary Forbes<br /> DMR Limited (UK registration01134804) <br /> A DMR Information and Technology Group company ( <a eudora="autourl" href="http://www.dmr.co.uk/">www.dmr.co.uk</a>)<br /> Direct tel 01689 889950 Fax 01689 860330 <br /> DMR is a UK registeredtrade mark of DMR Limited<br /> **********************************************************</font></blockquote><p>Hilary Forbes<br /> DMR Limited (UK registration01134804) <br /> A DMR Information and Technology Group company (<a eudora="autourl" href="http://www.dmr.co.uk/"><fontcolor="#0000FF"> <u>www.dmr.co.uk</u></font></a>) <br /> Direct tel 01689 889950 Fax 01689860330 <br /> DMR is a UK registered trade mark of DMR Limited<br /> **********************************************************
Almost, in the table there are multiple different incidents.
Incident April May June July Aug ….
===============================================
Falls 1 0 1 0 0
Roof Area 0 1 0 0 2
Complaints.. 1 2 3 2 2
Etc …
What I need to do is to be able to change the column heading to have a different start and finish month
Etc …
Incident Feb Mar Apr May June ….
==============================================
Falls 1 0 1 0 0
Roof Area 0 1 0 0 2
Complaints.. 1 2 3 2 2
The only way I can think of is to create 12 differents views with the months in order and then concatenating the start_month and end_month fields in the database to create the view name. Then do a select with the created view name.
Select * from May_June;
.
.
.
From: Hilary Forbes [mailto:hforbes@dmr.co.uk]
Sent: April 3, 2007 12:45 PM
To: Wilkinson, Jim
Cc: pgsql-sql@postgresql.org
Subject: RE: [SQL] Using a variable as a view name in a select
Jim
So let's suppose you have a "master" table of incidents
incident_no (serial)
incident_date (timestamp)
other fields
My understanding is that you now want to eg count the incidents starting in a given month and going forwards for 12 months, grouping the results by month. Have I understood the problem?
If so here goes:
Set up a table hftest
incident serial
incdate timestamp
SELECT * from hftest;
incident | incdate
----------+---------------------
1000 | 2006-05-03 00:00:00
1001 | 2006-04-03 00:00:00
1002 | 2006-04-01 00:00:00
1003 | 2006-12-08 00:00:00
1004 | 2007-02-28 00:00:00
1005 | 2007-08-03 00:00:00
Now:
SELECT max(to_char(incdate,'Mon')) ,count(incident) from hftest WHERE date_trunc('month',incdate) >='2006/04/01' AND date_trunc('month',incdate)<=date_trunc('month',date '2006/04/01' + interval '12 months') GROUP BY date_trunc('month',incdate) ORDER BY date_trunc('month',incdate);
max | count
-----+-------
Apr | 2
May | 1
Dec | 1
Feb | 1
which is almost what you want. To get the missing months with zeroes, I think you probably need a table of months and to use a left outer join but you may have found a better way by now!
Now I have NO idea on the efficiency of this as I rather suspect all those date_trunc functions may have an adverse effect!
Best regards
Hilary
At 16:44 03/04/2007, you wrote:
Hi Hilary,
I am trying to produce reports where the user can select a different fiscal year starting month. From this I would select the correct table view to produce the reports in the correct month order by column
Select * from table_view;
Incident April May June July Aug ….
===============================================
Falls 1 0 1 0 0
.
.
.
.
Can you think of another way to do this ?
From: Hilary Forbes [ mailto:hforbes@dmr.co.uk]
Sent: April 3, 2007 10:14 AM
To: Wilkinson, Jim; pgsql-sql@postgresql.org
Subject: Re: [SQL] Using a variable as a view name in a select
Jim
My initial reaction is what are you trying to achieve? Surely you could have one underlying table with dates in it and
SELECT * from mytable WHERE date1>='2007/04/01' AND date2<='2007/05/01';
but otherwise, like John, I would use an external scripting language to create the table name.
Hilary
At 14:04 03/04/2007, Wilkinson, Jim wrote:
I have created a view, called april_may. I need to select this view by combineing to fields in the database to create the view name etc …
Create view as select * from table_X;
I need to do something like this …
Select * from (select table.start_month||_||table.end_month);
==================
Start_month = april
End_month = May
What I what to pass to the select is the combination of the 2 fields as the view name.
Any ideas ?
Hilary Forbes
DMR Limited (UK registration 01134804)
A DMR Information and Technology Group company ( www.dmr.co.uk)
Direct tel 01689 889950 Fax 01689 860330
DMR is a UK registered trade mark of DMR Limited
**********************************************************
Hilary Forbes
DMR Limited (UK registration 01134804)
A DMR Information and Technology Group company ( www.dmr.co.uk)
Direct tel 01689 889950 Fax 01689 860330
DMR is a UK registered trade mark of DMR Limited
**********************************************************