Newsgroup: it.comp.www.php
Titolo: postgresql (alternativa a mysql?)

può darsi che su qualche migliaio di record mysql sia + veloce ma...
SUB-QUERIES:
test=# select * from (select * from pippo) as foo;
 campo1 
--------
 comm
(1 row)
TRANSACTIONS:
test=# select * from pluto; 
 campo1 
--------
(0 rows)
test=# begin;
BEGIN
test=# insert into pluto values ('valore');
INSERT 18871 1
test=# rollback;
ROLLBACK
test=# select * from pluto;
 campo1 
--------
(0 rows)
VIEWS:
test=# select * from pg_views where viewname='describes';
 viewname  | viewowner |                                                                                                                                                                                                                                                                                                          
definition                                                                                                                                                                                                                                                                                                           
-----------+-----------+---------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
-------------------------------
 describes | postgres  | SELECT DISTINCT c.relname AS table_name, a.attname 
AS column_name, t.typname FROM ((pg_attribute a JOIN pg_class c ON 
((a.attrelid = c.oid))) JOIN pg_type t ON ((a.atttypid = t.oid))) WHERE 
((EXISTS (SELECT pg_tables.tablename, pg_tables.tableowner, 
pg_tables.hasindexes, pg_tables.hasrules, pg_tables.hastriggers FROM 
pg_tables WHERE ((pg_tables.tablename = c.relname) AND 
(substr(text(pg_tables.tablename), 1, 2) <> 'pg'::text)))) AND 
((((t.typname <> 'cid'::name) AND (t.typname <> 'tid'::name)) AND 
(t.typname <> 'xid'::name)) AND (t.typname <> 'oid'::name))) ORDER BY 
c.relname, a.attname, t.typname;
(1 row)
FUNCTIONS (STORED PROCEDURES)
E TRIGGERS!!! (CON linguaggio transazionale simile al pl/sql di oracle):
test=# create function ridonda () returns opaque as '
test'# begin
test'# insert into pluto values (NEW.campo1);
test'# return NEW;
test'# end;
test'# ' language 'plpgsql';
CREATE
test=# REATE TRIGGER ridonda BEFORE INSERT ON pippo
test-#     FOR EACH ROW EXECUTE PROCEDURE ridonda();
ERROR:  parser: parse error at or near "reate"
test=# CREATE TRIGGER ridonda BEFORE INSERT ON pippo
test-#     FOR EACH ROW EXECUTE PROCEDURE ridonda();
CREATE
test=# insert into pippo values ('trigger!');
INSERT 18880 1
test=# select * from pluto;
  campo1  
----------
 trigger!
(1 row)
io non mi astengo, i work-around da PHP sono noiosi!
ciao

 ha scritto nel messaggio
news:Xns91B37F0B3...@10.16.96.46...


> --- - ------------------------------- describes | postgres  | SELECT

è un problema che volevo sollevare ripensando a tutti i threads sulle 
subqueries non supportate da MySQL...
a naso saranno state decine le persone che non sapevano non si potessero 
estrapolare certi dati con una query sola!
(e dimenticavo che pgsql supporta anche le foreign keys, se hai già solo 2 
tabelle in relazione ti può tornare utile!)
ciao


ICQ# 11129001
http://www.calogero.org/

mi inserisco un attimo nel discorso :))
dove trovo una versione di postgresql per windows
sul sito ufficiale non ho trovato nulla!!
ki mi da una mano ?????????

Jasx wrote:

non la trovi perche' non c'e' :) so che e' possibile installarlo tramite 
cygwin, ma non ho mai provato e non credo sia comunque immediato farlo.
http://www.cygwin.com/


 ciao
Scusa ma da quale versione è possibile usare foreign keys? Io avevo letto
che pg ne supporta la sintassi ma che in fin dei conti se ne infischia
(questo circa due anni fa, non ricordo quale versione fosse).
ciao,
Alx

 ha scritto nel messaggio
news:979a8.5715$tv6.1...@twister1.libero.it...

Ho trovato questo
http://people.freebsd.org/~kevlo/postgres/portNT.html
Ma mi sembra un po' confuso...
Ciao
--
Valerio Granato
http://www.musicoff.com
 - Music Online For Free
La Grande Comunità Online per Musicisti

Per il resto basta e avanza mysql :)
Una cosa che mi capita di voler fare in MySQL: ho una tabella di utenti,
	userid	status	username
	lserni	active	Leonardo Serni
Ho anche una tabella di logins
	userid	logindate
A questo punto voglio marcare come "inattivi" tutti gli utenti che hanno
fatto login in un dato giorno.
In PostgreSQL scriverei:
	UPDATE users SET status='inactive' 
		FROM logins
		WHERE users.userid=logins.userid
		AND logindate = '1 Jan 2002';
...ma in MySQL? Come aggiorno una tabella con i dati di un'altra?
(suppongo mi sia sfuggito qualcosa sul manuale)
Leonardo
-- 
And where the black and corkscrew towers climb
Lost and athirst the ragged pack abides,
Old as the aeons, trapped in tombs of time,
Sailing the tortuous temporal tides...

 infischia (questo circa due anni fa, non ricordo quale versione fosse).
non so da quale versione ma:
test=# create table master (campo1 integer primary key);
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index 'master_pkey' 
for table 'master'
CREATE
test=# create table slave (campo1 integer, foreign  key (campo1) references 
master(campo1));
NOTICE:  CREATE TABLE will create implicit trigger(s) for FOREIGN KEY 
check(s)
CREATE
test=# insert into master values(1);
INSERT 18910 1
test=# insert into slave values(2);
ERROR:  <unnamed> referential integrity violation - key referenced from 
slave not found in master
test=# insert into slave values(1);
INSERT 18912 1
test=# delete from master where campo1=1; 
ERROR:  <unnamed> referential integrity violation - key in master still 
referenced from slave
test=# 
(comunque io stesso uso mysql per siti con struttura delle tabelle 
semplice. dico solo che chi inizia un sito, deve valutare bene cosa gli 
serve e non scegliere il dbms per la sua popolarità!)
ciao!

 (suppongo mi sia sfuggito qualcosa sul manuale)
Supponi male, mi sa che non si puň proprio fare :)
In questa discussione sembro l'uccellaccio che dice "non si puň! non si
puň!"
Mi dispiace interverěnire solo per far sapere che molte cose con questo db
non sono permesse, ma purtroppo č cosě. Mysql č il DBMS piů veloce solo
perchč non ha moltissime cose che hanno gli altri DBMS.
Subquery, viste, integritŕ referenziale, trigger sono cose che mysql non ha
e mai avrŕ (mi sembra che le viste siano implementate in mysql 4), perciň č
cosě veloce.
Resta un prodotto indubbiamente valido sotto certi aspetti ma carente sotto
altri.
Ciao Zooropa

Vincenzo "TaTaC" Lavino wrote:

Non gira nativamente, insomma è un casino. Questo è uno dei principali 
motivi della minor diffusione di postgresql rispetto a mysql.
Ciao.
-- 
***  Per E-mail rimuovi ModE dall'indirizzo  ***
  *** Linux user # 198661 --- ICQ 33500725 ***
*** homepage 
http://web.tiscalinet.it/kailed
 ***
            *** Powered by Linux ***

 (suppongo mi sia sfuggito qualcosa sul manuale)
Infatti dovrebbe funzionare una query tipo quella che hai postato...
UPDATE tabella,tabella2 SET tabella.status='inattivo' WHERE
tabella.userid=tabella2.userid AND tabella2.logindate="1 Jan 2002"
(il FROM mi sa che non ci va...)
Ciao
Alex

 ha scritto nel messaggio
news:979a8.5715$tv6.1...@twister1.libero.it...

(rispondo a tutti sotto questo post)
SI che c'è pg-sql per windows, era in giro qualche tempo fa poi è sparita,
confermo che funziona, io c'è l'ho preziosamente custodita su un CD :-)))
Sono parecchi Mb... chi la vuole chieda pure...
anzi, magari la carico da qualche parte e vi posto l'url...
Ciao
Alex

"Alessio" <(
alessi...@libero.it
)@NOSPAM.tld> ha scritto nel messaggio
news:Tdda8.64246$3J1.1...@news2.tin.it...

caricato...
http://www.scriptando.it/pgsql-win.zip
Sono 4 Mb e qualcosa...
Ciao
Alex

 Sono parecchi Mb... chi la vuole chieda pure...
se non sbaglio la versione che hai tu necessita COMUNQUE di cygwin...


(il FROM mi sa che non ci va...)
Creo una semplice libreria, e dichiaro 404 tutti i libri prestati ad un
noto merdacchione (ogni riferimento a persone realmente esistenti...):
mysql> CREATE TABLE test1 ( nome varchar(50), id integer );
Query OK, 0 rows affected (0.10 sec)
mysql> CREATE TABLE test2 ( id integer, id2 integer );
Query OK, 0 rows affected (0.11 sec)
mysql> CREATE TABLE test3 ( id integer, status integer, title varchar(20));
Query OK, 0 rows affected (0.10 sec)
mysql> INSERT INTO test1 VALUES ('Leonardo Serni', 1);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO test2 VALUES ( 1, 1 );
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO test3 VALUES ( 1, 200, 'Guardians of the West');
Query OK, 1 row affected (0.13 sec)
mysql> UPDATE test3 SET status=404 WHERE 
test3.id
=test2.id2 AND
test2.id
=
test1.id
 AND nome='Leonardo Serni';
ERROR 1109: Unknown table 'test2' in where clause
mysql> UPDATE test3 SET status=404 FROM test1,test2 WHERE
test3.id
=test2.id2 AND 
test2.id
=
test1.id
 AND nome='Leonardo Serni';
ERROR 1064: You have an error in your SQL syntax near 'FROM test1,test2
WHERE 
test3.id
=test2.id2 AND 
test2.id
=
test1.id
 AND nome='Leonar' at line 1
Lo scopo finale e' avere 'Guardians of the West' in stato 404, perche' e'
prestato all'utente con id=1.
Ovviamente in PHP posso farlo:
	$exec = SQLExec($conn, "SELECT id2 FROM test2, test1 WHERE
test2.id
=
test1.id
 AND name='Leonardo Serni';");
	$rows = SQLNumRows($exec);
	for ($row=0; $row < $rows; $row++)
	{
		$idbook = SQLFetchResult($exec, $row, 0);
		SQLDo($conn, "UPDATE test3 SET status=404 WHERE
id=$idbook;");
	}
	SQLFreeResult($exec);
...ma, nel caso in questione, potrei dover lanciare 200 queries invece di
una sola!
Leonardo "calunnie. Al massimo una ventina"


ERROR 1109: Unknown table 'test2' in where clause
***************************************
Michael Holopainen: I was looking for info on how-to UPDATE with data
retrived from another table. aka. UPDATE with JOIN.
I noticed many other people were asking the same question so I desided
to write this comment.
The answer is : "You can't".
Not until MySQL 4.1 that supports sub-selects.
Then and only then you can use something like this:
UPDATE t1 SET t1.col = (SELECT t2.col FROM t2 WHERE <where clause>)
WHERE <where clause>; 
As far as I can tell not even in MySQL 4.1 can you use JOIN with
UPDATE. 
******************************************
hola
Buttha
-- 
Dicesi antispam: la prima i nell'indirizzo email

 Per il resto basta e avanza mysql :)
IMHO, mySQL.. va bene per *giocare* ... quando devi fare qualcosa di più
*spinto*
mySQL... non basta.
--
CIAO!
Gusher