Lavorando su un postgres vecchiotto avevo scritto una riga di codice php che con le nuove versioni non è accettata per questioni di casting.
Visto che in effetti il risparmio è notevole, oltre che più corretto, segnalo la funzione TO_CHAR (che ha nelle opzioni quello che spesso serve per fare manipolazioni di date).

Quello che prima era trovato concatenando due stringhe ricavate da DATE_PART (per prendere una parte di un timestamp without date zone) e facendolo passare per LPAD in due cifre riempito con caratteri 0:

( LPAD( DATE_PART('day',file_upped), 2,'0') ||
    LPAD( DATE_PART('month',file_upped), 2,'0') )

ora è trovato con questa semplice funzione che ha fra le opzioni già la possibilità di avere giorno e mese in campo di 2 cifre:

TO_CHAR(file_upped,'DDMM')

Mea culpa. Negli ultimi mesi ho dovuto dare un occhio in più alle query SQL e così sto ripassando e imparando un sacco di cose che prima mi erano sconosciute.

Una robba estremamente utile che prima facevo (male) “tagliando” in perl i dati fetch’ati dal database è prendere raggruppamenti di dati gruppati secondo una clausola.

La sostanza è che ultimamente mi ero ritrovato molto a mio agio nel raggruppare dati grazie all’opzione GROUP BY conteggiando le voci con COUNT. Il problema era che non sapevo come fare un taglio sul conteggio, e così scremavo i dati in perl dopo averli raccolti tutti dal database.
Questa cosa palesemente non risultava buona.
Quindi dopo prezioso suggerimento ho letto questa paginetta e ho trovato HAVING. :) Niente di trascendentale, ma per me salvifico.

 => SELECT nome, COUNT(*) FROM lista
       GROUP BY nome HAVING COUNT(*) > 600 ORDER BY count DESC;

Dopo aver filtrato (eventualmente) i dati con WHERE, l’input derivato dalla tabella può essere soggetto al GROUP BY per raggruppare dati, e i raggruppamenti possono essere scremati dalla clausola HAVING.
GROUP BY viene utilizzato per raggruppare insieme quelle righe della tabella che condividono gli stessi valori in tutte le colonne selezionate.
I raggruppamenti vanno d’accordo con funzioni che aggregano espressioni – come SUM() o COUNT().

Piccole scoperte per grandi pivelli. :-P

Avevo necessità di ricopiare una tabella già fatta da un database postgres (8.3) ad un altro.
Come fare per avere la stessa linea “CREATE” se l’history non riesce a recuperare così tanto indietro nel tempo?
Semplice: usare pg_dump. :)

pg_dump è l’utility per fare il backup dei database Postgres. Con un paio di opzioni, ha fatto perfettamente al caso mio:

# pg_dump nome_database --schema-only -t nome_tabella

L’opzione -t o –table serve a specificare la tabella che abbiamo scelto, e –schema-only dumpa solo la definizione dei data (non i dati stessi).

Senza specificare un output, pg_dump spamma su STDOUT, quindi con un taglia e incolla il gioco è fatto. :)

Un bigint occupa 8 bytes.
Dal manuale di postgres:

bigint
8 bytes
large-range integer
range: -9223372036854775808 to 9223372036854775807
Byte Bit Potenza Range decimale Ordine
1 8 28 0 .. 255 100
2 16 216 0 .. 65 535 10K
4 32 232 0 .. 4 294 967 295 1 miliardo
8 64 264 0 .. 18 446 744 073 709 551 615 1 miliardo di miliardi

Hai voglia, oh caro spammatore, a riempirmi di record. :-P

A forza di pistolare sui db, sto provando un po’ di tutto per vedere dove mi trovo meglio.
Un db importante sul fronte opensource è PostgreSQL (sito ufficiale e wiki per un po’ di storia).

Per creare utenze all’interno del sistema postgres è possibile utilizzare programmi da shell (createuser) o comandi da prompt (CREATE ROLE utente).
Per avere un’idea dei ruoli creati si puo’ fare un select sulla tabella pg_roles del db postgres (di default)…

postgres=# SELECT rolname FROM pg_roles ;
 rolname
----------
 postgres
 odg
(2 rows)

oppure usare il semplice comando \du

postgres=# \du
                               List of roles
 Role name | Superuser | Create role | Create DB | Connections | Member of
-----------+-----------+-------------+-----------+-------------+-----------
 odg       | no        | no          | no        | no limit    | {}
 postgres  | yes       | yes         | yes       | no limit    | {}
(2 rows)

(Come si vede ho creato un ruolo extra (odg) oltre a quello di default.)

More »

    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.