+++ /dev/null
-
- Frequently Asked Questions
-
- Casto kladené dotazy (FAQ) PostgreSQL
-
- Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
- 8.3)
-
-
-
- Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
- http://www.postgresql.org/files/documentation/faqs/FAQ.html
-
- Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
- http://www.postgresql.org/docs/faq/.
- _________________________________________________________________
-
- Obecné otázky
-
- 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
- 1.2) Kdo rídí vývoj PostgreSQL?
- 1.3) Pod jakou licencí je PostgreSQL?
- 1.4) Na kterých platformách lze provozovat PostgreSQL?
- 1.5) Kde mohu získat PostgreSQL?
- 1.6) Jaká je poslední verze?
- 1.7) Kde mohu získat podporu?
- 1.8) Jak a kam hlásit chyby?
- 1.9) Kde najdu informace o známých chybách nebo nepodporovaných
- vlastnostech?
- 1.10) Jaká je dostupná dokumentace?
- 1.11) Jak se mohu naucit SQL?
- 1.12) Jak se mohu pripojit k týmu vývojáru?
- 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
- 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v
- nekterých zemích?
-
- Dotazy na klientská rozhraní
-
- 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
- 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
- 2.3) Existuje grafické rozhraní pro PostgreSQL?
-
- Administrativní dotazy
-
- 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
- 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
- 3.3) Jak vyladit databázi na vyssí výkon?
- 3.4) Jaké mám ladící prostredky?
- 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
- 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu
- PostgreSQL?
- 3.7) Jaký hardware bych mel pouzívat?
-
- Provozní dotazy
-
- 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
- 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných
- uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto
- informací?
- 4.3) Jak zmenit datový typ sloupce?
- 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
- 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního
- textového souboru?
- 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
- 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
- 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index
- pro case insensitive hledání?
- 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
- dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli
- je polozka NULL nebo ne?
- 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
- 4.11.1) Jak vytvorit serial/auto-increment polozku?
- 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
- 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
- prostredí?
- 4.11.4) Proc není vygenerované císlo pouzito pri prerusení
- transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo
- typu SERIAL?
- 4.12) Co to je OID? Co je to CTID?
- 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
- AllocSetAlloc()"?
- 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
- 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
- cas?
- 4.16) Jak provést vnejsí spojení (outer join)?
- 4.17) Jak provést dotaz napríc nekolika databázemi?
- 4.18) Muze funkce vrátit více rádku nebo sloupcu?
- 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
- 4.20) Jaké jsou moznosti replikace databází?
- 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí?
- Proc jsou velká písmena v názvech automaticky prevedena na malá
- písmena?
- _________________________________________________________________
-
- Obecné otázky
-
- 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
-
- Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
- V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v
- hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si
- rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu.
-
- PostgreSQL je relacní databáze s nekterými objektovými rysy, která má
- moznosti tradicních komercních databázových systému s nekolika
- rozsíreními, které lze najít v DBMS systémech prístí generace.
- Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne
- dostupné.
-
- Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru
- navzájem komunikujících prostrednictvím internetu. Tento projekt není
- rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu,
- prectete si vývojárské FAQ na adrese
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
-
- 1.2) Kdo rídí vývoj PostgreSQL?
-
- Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete
- zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny
- uzivatelu, ale ty existují více z administrátorských duvodu nez z
- organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke
- které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se
- do elektronické konference. Více ve vývojárském FAQ.
-
- 1.3) Pod jakou licencí je PostgreSQL?
-
- PostgreSQL je predmetem následujících autorských práv:
-
- Dílcí Copyright (c) 1996-2009, PostgreSQL Global Development Group
- Dílcí Copyright (c) 1994-6, Regents of the University of California
-
- Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a
- rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely,
- bez licencního poplatku a bez písemné licencní smlouvy, za podmínky,
- ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech,
- jakoz i obsah tohoto a dvou následujících odstavcu.
-
- THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM
- PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ,
- NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM
- TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE
- UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ
- SKODY.
-
- THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
- NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
- SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
- LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
- ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI.
-
- Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde
- zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme
- v úmyslu na této skutecnosti cokoli menit.
-
- 1.4) Na kterých platformách lze provozovat PostgreSQL?
-
- Strucne receno, PostgreSQL bezí na vsech moderních unixových
- systémech. Seznam tech, u kterých probehlo testování, naleznete v
- instalacních instrukcích.
-
- PostreSQL také bezí nativne na vsech Microsof Windows systémech
- odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
- a Windows2003. Instalacní balícek naleznete na adrese
- http://pgfoundry.org/projects/pginstaller. Na starsích systémech s
- jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem
- Cygwin.
-
- Dále existuje port pro Novell Netware 6 port na adrese
- http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F .
-
- 1.5) Kde mohu získat PostgreSQL?
-
- Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
- klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
-
- 1.6) Jaká je poslední verze?
-
- Nejnovejsí verzí PostgreSQL je verze 8.2.5
-
- V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
- mesícu malé verze.
-
- 1.7) Kde mohu získat podporu?
-
- Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je
- prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na
- stránky,kde se muzete prihlásit do elektronické konference. Pro
- zacátek jsou doporucené konference general nebo bugs.
-
- Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net).
- K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER"
- irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti
- existuje jeste spanelská (#postgresql-es) a francouzská
- (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet.
-
- Seznam spolecností poskytující komercní podporu naleznete na adrese
- http://techdocs.postgresql.org/companies.php.
-
- 1.8) Jak a kam hlásit chyby?
-
- Vyplnte formulár na adrese
- http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
- ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi
- PostreSQL.
-
- Chyby reportované prostrednictvím chybového formuláre nebo zasláním
- mailu do PostgreSQL konference obvykle generuje následující odezvu:
- * Nejedná se o chybu, a proc
- * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO
- * Tato chyba byla opravena v aktuální verzi
- * Tato chyba byla jiz opravena ve verzi, která zatím nebyla
- oficiálne uvolnena
- * Pozadavek na dalsí doplnující informace:
- + Operacní systém
- + Verze PostgreSQL
- + Test reprodukující chybu
- + Ladící informace
- + Backtrace výstup debuggeru
- * Jedná se o zatím nezjistenou chybu, pak muzete cekat
- + Záplatu odstranující chybu, která bude vlozena do dalsí velké
- nebo malé verze
- + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
- je proto pridána do TODO
-
- 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
-
- PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO
- naleznete seznam známých chyb, chybejících vlastností, a plány do
- budoucna.
-
- Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
- * Pozadavek je jiz v TODO
- * Pozadovaná funkce není chtená protoze
- + Duplikuje jiz existující funkci, která respektuje SQL
- standard
- + Implementací funkce by se prílis zkomplikoval kód bez
- relevantního prínosu
- + Funkce by mohla být nebezpecná nebo nespolehlivá
- * Pozadavek je pridán do TODO
-
- PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili,
- ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V
- praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se
- mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné
- místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL
- je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny
- zmeny, k nemz doslo.
-
- 1.10) Jaká je dostupná dokumentace?
-
- PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál,
- manuálové stránky a testovací príklady. Podívejte se do adresáre /doc.
- Manuál je prístupný online na http://www.postgresql.org/docs.
-
- K dispozici jsou zdarma dve online knihy na adresách
- http://www.postgresql.org/docs/books/awbook.html a
- http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit.
- Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je
- na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
- kolekce technicky orientovaných clánku tematicky spojených s
- PostgreSQL na adrese http://techdocs.postgresql.org/.
-
- Rádkový klient psql má \d príkazy pro zobrazení informací o typech,
- operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro
- zobrazení dostupných príkazu.
-
- Dalsí dokumentaci najdete na nasem webu.
-
- 1.11) Jak se mohu naucit SQL?
-
- Podívejte se do výse uvedené dokumentace. Dalsí online knihou je
- "Teach Yourself SQL in 21 Days, Second Edition" na adrese
- http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
- uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
- S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et
- al., McGraw-Hill.
-
- Dalsí online tutoriály jsou dostupné na adresách:
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12) Jak se mohu pripojit k týmu vývojáru?
-
- Prostudujte si Developer's FAQ.
-
- 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
-
- Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
- výkon, spolehlivost, podpora a cena.
-
- Vlastnosti
-
- PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS
- systému jako jsou: transakce, vnorené dotazy, spouste, referencní
- integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce,
- které ostatní systémy bezne nepodporují. Napr. uzivatelem definované
- typy, dedicnost, pravidla (rules), a MVCC architekturu.
-
- Výkon
-
- Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open
- Source databázemi. V nekterých prípadech je rychlejsí, jindy
- pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím.
-
- Spolehlivost
-
- Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je
- nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a
- obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v
- beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz
- nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez
- srovnatelní s ostatními databázemi v této oblasti.
-
- Podpora
-
- Na nasich internetových konferencích se setkává velká skupina vývojáru
- a uzivatelu pri resení vyskytujících se problému. Nase internetové
- konference umoznují kontakt velké skupiny vývojáru a uzivatelu.
- Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy
- negarantují resení problému. Veríme ale, ze díky prímému kontaktu na
- vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým
- kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují
- komercní "per-incident" podporu, existuje spolecností, kterí ji
- nabízejí (FAQ sekce 1.7.)
-
- Cena
-
- PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také
- muzete neomezene pouzívat nás kód ve svých produktech s výjimkami
- specifikovanými v nasí licenci (prebíráme BSD licenci).
-
- 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
- zemích?
-
- Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA.
- Podpora letního casu (daylight saving time) pro Kanadu a Západní
- Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech
- následujících verzích. Starsí verze pouzívaly systémovou databázi
- casových zón obsahující, krome jiného, informaci o tom, zda se pro
- danou casovou zónu rozlisuje mezi letním a zimním casem.
- _________________________________________________________________
-
- Dotazy na klientská rozhraní
-
- 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
-
- PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C.
- Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba
- stáhnout z internetu samostatne. Osamostatnení techto projektu
- umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez
- ohledu na vydání nové verze PostgreSQL.
-
- Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro
- PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho
- dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci
- Drivers/Interfaces.
-
- 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
-
- Dobrým úvodem do problematiky databází v prostredí webových stránek
- muze být web http://www.webreview.com.
-
- PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
-
- Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
- podporou CGI - CGI.pm nebo mod_perl(u).
-
- 2.3) Existuje grafické rozhraní pro PostgreSQL?
-
- K dispozici je rada grafických nástroju podporujících PostgreSQL a to
- od komercních nebo open source vývojáru. Podrobný seznam naleznete na
- adrese http://www.postgresql.org/docs/techdocs.54.
- _________________________________________________________________
-
- Administrativní dotazy
-
- 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
-
- Pri spoustení configure nastavte parametr --prefix
-
- 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
-
- Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z
- lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP
- spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a
- povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
- PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje
- restart databázového serveru.
-
- 3.3) Jak vyladit databázi na vyssí výkon?
-
- Výkon systému muzete ovlivnit ve trech oblastech:
-
- Zmeny dotazu
-
- * Pouzitím indexu vcetne cástecných a funkcionálních
- * Pouzitím COPY místo opakovaných INSERTu
- * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na
- commit
- * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu
- * Pouzitím klauzule LIMIT v poddotazech
- * Pouzitím predpripravených dotazu
- * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se
- pouzívají pri optimalizaci dotazu
- * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum
- * Odstranením indexu pred rozsáhlými zmenami v datech
-
- Konfigurace serveru
-
- Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru.
- Detaily naleznete v prírucce Administrátora v Server Run-time
- Environment/Run-time Configuration. Dalsí komentáre naleznete v
- http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
- ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
-
- Výber hardware
-
- Vliv hardware na výkon serveru je popsán v dokumentech
- http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
- a http://www.powerpostgresql.com/PerfList/.
-
- 3.4) Jaké mám ladící prostredky?
-
- Nastavením log_* promenných v konfiguraci serveru si vynutíte logování
- dotazu a procesních statistik, které Vám mohou pomoci pri ladení a
- optimalizaci výkonu.
-
- 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
-
- Prekrocil jste výchozí limit, který je 100 soucasne pripojených
- uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
- zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
-
- 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
-
- Zpusob císlování je popsán v dokumentaci na
- http://www.postgresql.org/support/versioning. Instrukce k provedení
- migrace na vyssí verzi jsou taktéz v dokumentaci na adrese
- http://www.postgresql.org/docs/current/static/install-upgrading.html.
-
- 3.7) Jaký hardware bych mel pouzívat?
-
- Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze
- vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a
- kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez
- lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne
- pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré
- venovat cas nalezení vhodné hardwarové konfigurace. Na nasich
- elektronických konferencích muzete diskutovat o vhodných konfiguracích
- a znackách.
- _________________________________________________________________
-
- Provozní dotazy
-
- 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
-
- Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte
- SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY,
- je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet
- záznamu, pouzijte kurzor a príkaz FETCH.
-
- Pro výber náhodného rádku pouzijte príkaz ve tvaru:
-SELECT col
-FROM tab
-ORDER BY random()
-LIMIT 1;
-
- 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu.
- Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací?
-
- V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql
- získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód
- psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL
- príkazy, které jsou generovány pro získání výstupu psql "backslash"
- príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí
- zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL
- také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové
- tabulky). Klasickým dotazem do systémových tabulek získáte pozadované
- informace o strukture databáze.
-
- Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají
- prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i
- kdyz preferovány jsou dotazy do informacního schématu.
-
- Seznam vsech databází získáte príkazem psql -l
-
- Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
- Obsahuje ilustracní SELECTy potrebné k získání informací z systémových
- tabulek databáze.
-
- 4.3) Jak zmenit datový typ sloupce?
-
- Ve verzích 8.0 a pozdejsích jednoduse:
-ALTER TABLE ALTER COLUMN TYPE
-
- V starsích verzích:
-BEGIN;
-ALTER TABLE tab ADD COLUMN new_col new_data_type;
-UPDATE tab SET new_col = CAST(old_col AS new_data_type);
-ALTER TABLE tab DROP COLUMN old_col;
-COMMIT;
-
- Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového
- prostoru pouzitého v tu chvíli jiz neplatnými záznamy.
-
- 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
-
- PostgreSQL má tato omezení:
-
- Maximální velikost databáze: neomezena (existují 32TB db)
- Maximální velikost tabulky: 32 TB
- Maximální velikost rádky: 480GB
- Maximální velikost polozky 1 GB
- Maximální pocet rádku v tabulce: neomezeno
- Maximální pocet sloupcu v tabulce: 250-1600 podle typu
- Maximální pocet indexu na tabulce: neomezeno
-
- Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková
- pamet nebo velikost operacní pameti. Pokud máte nekterou z techto
- hodnot neobvykle velkou, muze dojít ke snízení výkonu.
-
- Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých
- souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB
- souboru takze limity souborového systému nejsou podstatné.
-
- Maximální velikost tabulky a maximální pocet sloupcu muzeme
- zectyrnásobit nastavením velikosti bloku na 32K.
-
- Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez
- 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro
- zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad
- MD5 funkcí nebo fulltextový index.
-
- 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
- souboru?
-
- PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
- textového souboru.
-
- Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé
- rádce celé císlo a textový popis. Text je v prumerne dvacet bytu
- dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
- obsahující odpovídající data bude zhruba 5.2 MB.
- 24 bytu: hlavicka rádku (priblizne)
- 24 bytu: jedna celocíselná polozka a jedna textová
- + 4 byty: ukazatel na stránku k entici
- ------------------------------------------------------
- 52 bytu na rádek
-
- Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
- 8192 bytu na stránce
----------------------- = 158 rádek na stránku
- 52 bytu za rádek
-
-100000 rádek
------------------------ = 633 stránek (zaokrouhleno nahoru)
- 158 rádek na stránce
-
-633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB)
-
- Indexy nemají tak velkou rezii, ale mohou být také velké, protoze
- obsahují indexovaná data.
-
- Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo
- diskového prostoru.
-
- 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
-
- Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije
- tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz
- vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze
- náhodný prístup k disku daný ctením indexu muze být pomalejsí nez
- lineární ctení tabulky nebo sekvencní ctení.
-
- PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k
- tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo
- ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v
- tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní
- pri urcení optimálního poradí a metody spojení tabulek. Statistiky by
- se meli aktualizovat opakovane, tak jak se mení obsah tabulek.
-
- Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek.
- Sekvencní zpracování následované explicitním trídením je obycejne
- rychlejsí nez pouzití indexu na velké tabulce.
-
- Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se
- vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky.
-
- Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání
- tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je
- prohledávání s indexem rychlejsí.
-
- Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se
- indexy pouzijí pouze za urcitých skutecností:
- * zacátek hledaného vzoru musí být ukotven k zacátku, tj.
- + vzor LIKE nesmí zacínat %
- + ~ regulární výraz musí zacínat ^
- * vzor nesmí zacínat intervalem, napr. [a-e]
- * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
- nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které
- jsou popsány v sekci 4.8
- * pri inicializaci databáze (initdb) musí být pouzito C locale nebo
- vytvorte speciální text_pattern_index, který umozní, pri
- respektování zmínených podmínek pouzití indexu operací LIKE. Pro
- vyhledávání celých slov je mozné a výhodné pouzít fulltext.
-
- 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
-
- Podívejte se do nápovedy k príkazu EXPLAIN.
-
- 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
- insensitive hledání?
-
- Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~,
- který je case-sensitive. Jeho case-insensitive varianta je operátor
- ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
-
- Case-insensitive vyhledání se resí:
-SELECT *
-FROM tab
-WHERE lower(col) = 'abc';
-
- Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
- funkcionální index:
-CREATE INDEX tabindex ON tab (lower(col));
-
- Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce
- obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe
- odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce
- obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly
- nebo triggery.
-
- 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
- retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka
- NULL nebo ne?
-
- Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
- funkci COALESCE(), napr.:
- SELECT COALESCE(col1, '') || COALESCE(col2, '')
- FROM tab
-
- Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS
- NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou
- false a tedy pokud pouzijete:
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- tak záznamy s NULL budou na zacátku setrídených dat.
-
- 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
-
- Typ Interní název Poznámky
- VARCHAR(n) varchar n urcuje maximální délku
- CHAR(n) bpchar retezec je do dané délky rozsíren mezerami
- TEXT text bez omezení délky
- BYTEA bytea pole bytu nespecifikované délky
- "char" char jeden znak
-
- Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
- chybových hláseních.
-
- Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku
- jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený
- prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou
- stranu, delsí retezce jsou komprimovány, takze obsazený prostor na
- disku muze být mensí nez se ceká.
-
- VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých
- známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je
- jeden gigabyte).
-
- CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní
- mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak
- jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot.
- Vsechny zmínené typy mají podobné výkonové charakteristiky.
-
- 4.11.1) Jak vytvorit serial/auto-increment polozku?
-
- V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
- automaticky vytvorí sekvence. Napríklad:
-CREATE TABLE person (
- id SERIAL,
- name TEXT
-);
-
- je automaticky transformováno na:
-CREATE SEQUENCE person_id_seq;
-CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
-);
-
- Podrobnejsí informace najdete v manuálu v popisu príkazu
- create_sequence.
-
- 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
-
- Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL,
- je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
-INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
-
- Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu
- INSERT, nebo zavolat currval() po provedení príkazu INSERT.
-
- 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
- prostredí?
-
- Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
-
- 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc
- vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL?
-
- Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení
- sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce.
- Odvoláním transakce, která si vyzádala císla sekvence se tato císla
- nenávratne ztratí.
-
- 4.12) Co to je OID? Co je to CTID?
-
- V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má
- kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové
- celé císlo, které je jedinecné v celé instalaci. Pretece po 4
- miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v
- interních systémových tabulkách.
-
- K získání unikátního císla v nesystémových tabulkách je vhodnejsí
- pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze
- pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste
- se toho obávali, pouzijte typ SERIAL8.
-
- CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se
- mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy
- jako adresaci fyzických rádku.
-
- 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
- AllocSetAlloc()"?
-
- Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj
- kernel má prílis nízké limity u urcitých zdroju. Pred startem
- PostgreSQL vyzkousejte:
-ulimit -d 262144
-limit datasize 256m
-
- Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu.
- Mel by zvednout limity datových segmentu vasich procesu na dostatecne
- velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude
- aplikovat pouze na aktuální proces a na vsechny nove vytvorené
- procesy. Jestlize máte problém s SQL klientem, protoze vám server
- vrátil prílis dat, zkuste to pred startem klienta.
-
- 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
-
- V psql napiste:
-SELECT version();
-
- 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
-
- Pouzijte CURRENT_TIMESTAMP:
-CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- 4.16) Jak provést vnejsí spojení (outer join)?
-
- PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
- jsou dva príklady:
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- nebo
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste
- vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT
- JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí
- vsechny spárované rádky i vsechny zbývající rádky z obou tabulek.
- Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje
- jako vnitrní spojení.
-
- 4.17) Jak provést dotaz napríc nekolika databázemi?
-
- Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné
- nez aktuální databáze. A to protoze má systémové tabulky ulozené
- nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz
- provedený napríc databázemi mel chovat.
-
- Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí
- funkcí. Druhý zpusob je simultální pripojení klienta ke vsem
- relevantním databázím a sloucení výsledku na strane klienta.
-
- 4.18) Muze funkce vrátit více rádku nebo sloupcu?
-
- Jde to jednoduse pomocí set-returning funkce. Více na
- http://www.postgresql.org/docs/techdocs.17.
-
- 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
-
- Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je
- problém s neplatnými odkazy na docasné tabulky, které byly od prvního
- spustení funkce zruseny a znovu vytvoreny pred dalsím spustením
- PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze
- provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí
- pokazdé znovu (neukládá se do cache).
-
- Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
- verzích.
-
- 4.20) Jaké jsou moznosti replikace databází?
-
- Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
- výhody a nevýhody.
-
- Master/Slave replikaci podporuje jeden hlavní server, který prijímá
- pozadavky na zápis a ctení, a nekolik podrízených serveru, které
- umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným
- resením tohoto typu je Slony-I.
-
- Replikace typu Multi-master podporuje existenci nekolika serveru s
- povoleným zápisem na více replikovaných serverech. Toto resení zvysuje
- zátez serveru, protoze je nutná synchronizace serveru.
- Nejrozsírenejsím volne dostupným resením je PGCluster.
-
- Jeste existuje nekolik komercních a hardware resení replikací
- podporujících ruzné modely replikace.
-
- 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc
- jsou velká písmena v názvech automaticky prevedena na malá písmena?
-
- Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození
- názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud
- se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku
- toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také
- vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré
- programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky.
- Takze pokud chcete, aby systém identifikoval identifikátor, musíte:
- * nepouzívat uvozovky v príkazu CREATE TABLE
- * v identifikátoru pouzít pouze malá písmena
- * v dotazech vkládat identifikátory do uvozovek
+++ /dev/null
-PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
-پرسيده مي شوند
-تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ù\81ايل: 28 شهریور 1383 هجری
-شمسی
-نگهدارنده اصلي Ù\81ايل (زبان انگليسي)در ØØ§Ù„
- Ù…ØÙ…ود تقي‌زاده مهرجردی
-
-آخرين نسخه اين Ù\81ايل را مي‌توانيد از اين
-آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
-سوالاتي كه در مورد يك سکوی(پلتÙ\81رم) خاص است در
-اين آدرس جواب داده شده اند
-http://www.PostgreSQL.org/docs/index.html
-
-
-
-سوالات عمومي
-1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙ\81ظ كرد؟
-1.2) قانون كپي رايت‌ (ØÙ‚وق معنوي) در مورد
-PostgreSQL به چه صورت است؟
-1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
-مي‌شود؟
-1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را
-اجرا كرد؟
-1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
-1.6) از كجا خدمات پشتيباني بگيرم؟
-1.7) آخرين نسخه اعلام شده چيست؟
-1.8) چه مستندات و راهنمائيهايي وجود دارند؟
-1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
-امكاناتي كه در اين پايگاه داده وجود ندارد
-مطلع شوم؟
-1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
-1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
-1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
-ملØÙ‚ شوم؟
-1.13) چگونه مي‌توانم يك اشكال را به گروه
-برنامه نويس اعلام كنم؟
-1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
-چه صورت است؟
-1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
-كمك كنم؟
-
-سوالات مربوط به استÙ\81اده از پايگاه داده
-2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
-2.2) Ú†Ù‡ ابزارهايي براي استÙ\81اده از PostgreSQL‌ با
-صÙ\81ØØ§Øª وب وجود دارد؟
-2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ\81يكي دارد؟
-2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
-PostgreSQL‌ ارتباط برقرار كرد؟
-
-سوالات مربوط به راهبري
-3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
-از /usr/local/pgsql/ نصب كنم؟
-3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
-كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
-3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
-3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
-3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
-كنترل كنم؟
-3.6) براي كارايي بالاتر و بهتر پايگاه داده من
-چه تنظيماتي را بايد انجام دهم؟
-3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
-دارد؟
-3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
-وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
-3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
-3.10) چرا براي به روز كردن نسخه پايگاه داده من
-بايد كل داده ها را dump‌ و مجدداً restore كنم؟
-3.11) از Ú†Ù‡ سخت اÙ\81زاري بايد استÙ\81اده كنم؟
-
-سوالات عملياتي
-4.1) تÙ\81اوت بين binary cursors Ùˆ Normal cursors چيست؟
-4.2) من چگونه مي‌توانم Ù\81قط روي چند رديÙ\81 اول يا
-يك رديÙ\81 تصادÙ\81ÙŠ درخواست SELECT‌ بزنم؟
-4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
-چيزهايي كه در psql‌ وجود دارد را ببينم؟
-4.4) چگونه يك ستون جدول را ØØ°Ù\81 مي‌كنيد؟ چگونه
-نوع داده آن را عوض كنيم؟
-4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك رديÙ\81،‌ جدول Ùˆ خود
-پايگاه داده چقدر است؟
-4.6) چقدر Ù\81ضاي ديسك سخت براي ذخيره كردن
-داده‌‌هاي يك Ù\81ايل متني مورد نياز است؟
-4.7) چگونه مي‌توانم بÙ\81همم كه Ú†Ù‡ كاربران،‌
-پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ\81
-شده است؟
-4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
-چرا از نمايه ها استÙ\81اده نمي‌كنند؟
-4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را
-توسط بهينه‌ساز درخواستها مشاهده كنم؟
-4.10) نمايه R-tree‌ چيست؟
-4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
-Optimizer)
-4.12) چگونه از عبارات منظم براي جستجو استÙ\81اده
-كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن
-نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن
-از نمايه استÙ\81اده كنم؟
-4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
-كه يك Ù\81يلد NULL‌ است؟
-4.14) تÙ\81اوت بين گونه‌هاي مختلÙ\81 character چيست؟
-4.15.1) چگونه مي‌توانم يك Ù\81يلد سريال يا
-اÙ\81زايشي ايجاد كنم؟
-4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
-بدانم؟
-4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
-شرایط race برای سایر کاربران می شوند؟
-4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
-شده مجدداً استÙ\81اده نمی شود؟ چرا بین اعداد
-سریالی یک Ù\81اصله خالی ایجاد Ù…ÛŒ شود؟
-4.16) OID و TID چه هستند؟
-4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
-استÙ\81اده مي‌شود چيست؟
-4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
-مي‌گيرم؟
-4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
-PostgreSQLيي كه من استÙ\81اده مي‌كنم چيست؟
-4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها
-خطای "invalid large obj descriptor"به وجود می آید؟
-4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
-جاري را به عنوان مقدار پيش‌Ù\81رض داشته باشد؟
-4.22) چرا زير درخواستهايي كه از IN استÙ\81اده
-مي‌كنند كند هستند؟
-4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join)
-انجام دهم؟
-4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
-داده توليد كرد؟
-4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ\81
-يا ستون باشد؟
-4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
-جداول موقت را ايجاد يا ØØ°Ù\81 كرد؟
-4.27) چه گزينه‌هايي براي تكرار (replication) وجود
-دارد؟
-4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
-
-توسعه PostgreSQL
-5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
-اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
-5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
-جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
-داشته باشم.
-5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
-كه خروجي آن يك ‌tuple (چند تايي) باشد؟
-5.4) من يك Ù\81ايل منبع را عوض كرده ام چرا در
-عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
-
-
-
-
-سوالات عمومي
-1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙ\81ظ كرد؟
-PostgreSQL به صورت Post-Gres-Q-L‌ تلÙ\81ظ مي‌شود. يك Ù\81ايل
-صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
-كساني كه مايلند تلÙ\81ظ صØÙŠØ را بشنوند وجود
-دارد.
-PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
-توسعه داده شده است (هنوز هم بعضي مواقع براي
-سادگي به آن Postgres Ú¯Ù\81ته مي‌شود) كه يك نمونه
-تØÙ‚يقاتي از پايگاه داده‌هاي نسل بعد است.
-PostgreSQL همان الگوي داده قوي و انواع داده را
-ØÙ\81ظ كرده است ولي زبان PostQuel را با يك
-زيرمجموعه پيشرÙ\81ته از SQL جايگزين كرده است.
-PostgreSQL متن باز بوده و متن كامل آن در دسترس
-است.
-PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در
-گروه پست الكترونيك برنامه‌نويسان PostgreSQL
-عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي
-مي‌باشد. (براي ديدن Ù†ØÙˆÙ‡ ملØÙ‚ شدن به اين تيم
-قسمت 1.6 را ببينيد). اين تيم در ØØ§Ø¶Ø± مسئوليت
-تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را
-بر عهده دارد. اين يك پروژه گروهي است Ùˆ ØªØØª
-كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در
-مورد اين تيم به آدرس
-http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد.
-اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به
-وجود آمد. اÙ\81راد بسياري در توسعه Ùˆ رÙ\81ع اشكال Ùˆ
-انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
-PostgreSQL از روي آن نوشته شده است، توسط تعداد
-زيادي دانشجوي كارشناسي ارشدو دانشجوي
-كارشناسي Ùˆ تيم برنامه‌نويسي كه ØªØØª نظر
-پروÙ\81سور Michael Stonebrake در دانشگاه
-بركلي،‌كاليÙ\81رنيا كار مي‌كرده‌اند نوشته
-شده است.
-نام اصلي نرم اÙ\81زار در دانشگاه بركلي Postgres‌
-بود. در سال 1995 بعد از اضاÙ\81Ù‡ شدن SQL نام آن به
-Postgres95 تغيير داده شد. در سال 1996 نام آن به
-PostgreSQL تغيير داده شد.
-1.2) قوانين كپي رايت در مورد PostgreSQL به چه صورت
-است؟
-PostgreSQL ØªØØª قانون كپي رايت زير قرار دارد:
-PostgreSQL Data Base Management System
-Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions
-Copyright (c) 1994-6 Regents of the University of California
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose, without fee, and without a written agreement is
-hereby granted, provided that the above copyright notice and this paragraph and
-the following two paragraphs appear in all copies.
-IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
-PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
-THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
-THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
-UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-قانون بالا ليسانس BSD كه يك ليسانس كلاسيك
-براي متن‌هاي باز است مي‌باشد. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
-در مورد Ù†ØÙˆÙ‡ استÙ\81اده از متن در آن ديده
-نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
-تغيير آن نداريم.
-1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
-مي‌شود؟
-در ØØ§Ù„ت كلي PostgreSQL روي هر پلتÙ\81رم (سكوي) سازگار
-با يونيكس اجرا مي‌شود. ليست پلتÙ\81رمهايي كه
-تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
-درقسمت دستورالعملهاي نصب آمده است.
-1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را
-اجرا كرد؟
-Client
-مي‌توان psql, كتابخانه libpq و ساير واسطها و
-برنامه‌هاي كاربردي را طوري كامپيل كرد كه
-روي Ù…ØÙŠØ·Ù‡Ø§ÙŠ ÙˆÙŠÙ†Ø¯ÙˆØ² نيز اجرا شوند. در اين
-ØØ§Ù„ت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
-شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙ\81رم
-لينوكس در ØØ§Ù„ اجراست ارتباط برقرار
-مي‌كند.يك Ù\81ايل win32.mak همراه با كدهاي PostgreSQL
-وجود دارد كه براي كامپيل كردن كتابخانه libpq و
-برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
-ارتباط به صورت ODBC‌ را نيز دارد.
-Server
-با استÙ\81اده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان
-پايگاه داده را روي ويندوز NT و يا Win2K اجرا
-كرد.براي ديدن اطلاعات بيشتر Ù\81ايل pgsql/doc/FAQ_MSWIN
-‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
-ببينيد Ùˆ يا اينكه به اين صÙ\81ØÙ‡
-http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد.
-در ØØ§Ù„ ØØ§Ø¶Ø± يك عمليات انتقال PostgreSQL به روي
-سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت
-اين پروژه به سايت‌هاي
-http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ
-http://techdocs.postgresql.org/guides/Windows مراجعه كنيد.
-همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز
-در ØØ§Ù„ انجام است كه در سايت http://forge.novell.com
-مي‌توانيد اطلاعات بيشتر را ببينيد.
-1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
-PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub
-مي‌توانيد بگيريد. در صÙ\81ØÙ‡ اصلي سايت ليست
-ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
-آنها بگيريد آمده است.
-1.6) از كجا خدمات پشتيباني بگيرم؟
-گروه براي Ø¨ØØ« در مورد موضوعات مختلÙ\81 در زمينه
-PostgreSQL است. براي عضو شدن در اين گروه پستي يك
-نامه الكترونيكي به آدرس گروه با Ù…ØØªÙˆÙŠØ§ØªÛŒ كه
-در ادامه آمده است ارسال كنيد. در قسمت Subject
-چيزي ننويسيد.
- subscribe
- end
-همچنين يك گروه پستي هم به صورت ارسال چكيده
-پيامها وجود دارد. براي عضو شدن در اين گروه يك
-نامه با Ù…ØØªÙˆÙŠØ§Øª زير به این آدرس ارسال كنيد.
- subscribe
- end
-در اين گروه هر موقع ØØ¬Ù… نامه‌ها به 30
-كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
-گروه پستي بررسي اÙ\90شكالات هم وجود دارد. براي
-عضو شدن در اين گروه يك نامه با Ù…ØØªÙˆÙŠØ§Øª زير به
- subscribe
- end
-گروه پستي مخصوص توسعه دهندگان
-(برنامه‌نويسان) نيز وجوددارد. براي عضويت در
-اين گروه يك نامه به آدرس زير با Ù…ØØªÙˆÙŠØ§Øª مشخص
- subscribe
- end
-گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
-دارد كه مي‌توانيد در سايت http://www.postgresql.org
-ببينيد.
-همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
-وجود دارد. شما مي‌توانيد از Ù\81رمان يونيكسي irc
--c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
-irc.freenode.net استÙ\81اده كنيد.
-ليست شركتهايي كه از طريق آنها مي‌توانيد
-خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙ\81ت
-كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
-موجود است.
-1.7) آخرين نسخه اعلام شده چيست؟
-آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
-هدÙ\81 ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
-ارائه شود.
-1.8) چه مستندات و راهنمائيهايي وجود دارند؟
-چندين كتابچه Ùˆ صÙ\81ØØ§Øª راهنما Ùˆ مثالهاي كوچك
-همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
-دارد. براي ديدن صÙ\81ØØ§Øª راهنما مي‌توانيد به
-سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
-دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
-http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
-وجود دارد. ليستي از كتابهايي كه قابل خريد
-است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
-وجود دارد. همچنين ليستي از مقالات Ù\81ني در
-مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
-دارد.
-برنامه psql يك دستور d\ دارد كه اطلاعاتي در
-مورد انواع داده‌هاي قابل تعريÙ\81 Ùˆ عملگر‌ها
-و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
-ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
-1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
-امكاناتي كه در اين پايگاه داده وجود ندارد
-مطلع شوم؟
-PostgreSQL يك زير مجموعه پيشرÙ\81ته از SQL-92 را
-پشتيباني مي‌كند. در ليست TODO اÙ\90شكالات
-شناخته شده يا امكاناتي كه وجود ندارد و يا
-برنامه‌‌هاي آينده آمده است.
-1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
-كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
-‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
-http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي
-خيلي خوب هم در سايت‌هاي
-http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ
-http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ
-http://sqlcourse.com در مورد SQL وجود دارد.
-كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
-استÙ\81اده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
-ويرايش دوم" در سايت
-http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
-تعداد زيادي از كاربران كتاب The Practical SQL را
-ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
-انتشارات McGraw-Hill مي‌باشد.
-1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
-خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
-مشكلي ندارد.
-1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
-ملØÙ‚ شوم؟
-ابتدا،‌آخرين سورس را دونلود كرده و مستندات
-مربوط به برنامه‌نويسي PostgreSQL را در سايت
-مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
-pgsql-hackers عضو شويد. در مرØÙ„Ù‡ آخر وصله‌هاي با
-كيÙ\81يت بالا را به pgsql-patches ارسال كنيد.
-تعداد زيادي از برنامه‌نويسان وجود دارند كه
-امتياز انجام تغييرات در cvs‌ را دارند. هر
-كدام از آنها تعداد زيادي وصله‌‌ با كيÙ\81يت
-بالا به گروه ارسال كرده‌اند كه اعتماد
-گردانندگان PostgreSQL را به دست آورده‌اند.
-1.13) چگونه مي‌توانم يك اÙ\90شكال را به گروه
-برنامه نويس اعلام كنم؟
-لطÙ\81اً صÙ\81ØÙ‡ مربوط به اÙ\90شكالات PostgreSQL را در
-سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
-اين سايت Ù†ØÙˆÙ‡ گزارش Ùˆ ارسال يك اشكال توضيØ
-داده شده است.
- همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
-يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
-بازديد كنيد.
-1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
-چه صورت است؟
-راههاي مختلÙ\81ÙŠ براي اندازه‌گيري Ùˆ مقايسه
-نرم‌اÙ\81زارها وجود دارد كه عبارتند از
-امكانات، كارايي، قابليت اعتماد، پشتيباني و
-قيمت
- امكانات
- PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
- پايگاه داده تجاري بزرگ نظير transactions, subselets,
- triggers, views, foreign key referential integrity Ùˆ sophisticated
- locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
- دارد كه پايگاههاي داده ديگر آن را ندارند
- نظير user-defined types‌و Inheritance‌و rules‌و multi-version
- concurrency control
-
- كارايي
- كارايي PostgreSQL در ØØ¯ بقيه سيستم‌هاي
- تجاري و متن باز است. در بعضي موارد سريعتر و
- در بعضي موارد از آنها كندتر است. در مقايسه
- با MySQL براي كاربران بيشتر و درخواست‌هاي
- پيچيده و بار زياد خواندن/نوشتن سريعتر است.
- در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
- البته MySQL خيلي از امكانات PostgreSQL كه در بالا
- به آن اشاره شد را ندارد. هدÙ\81 اصلي ما امكانات
- و قابليت اعتماد بالاست در ضمن آنكه تلاش
- مي‌كنيم تا كارايي آن نيز بهبود يابد. در
- آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
- جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طرÙ\81 ديگر
- MySQL‌ يك شركت است كه Ù…ØØµÙˆÙ„ خود را به صورت متن
- باز ارائه مي‌كند ولي براي نرم‌اÙ\81زار غير
- متن باز خود Ø§ØØªÙŠØ§Ø¬ به ليسانس تجاري دارد بر
- خلاÙ\81 PostgreSQL كه يك گروه كاملاً متن باز هستند.
-
- قابليت اطمينان
- ما Ù\81كر مي‌كنيم كه يك سيستم پايگاه
- داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
- تمام تلاشمان را براي ارائه كدهاي پايداري
- كه به خوبي تست شده باشند Ùˆ كمترين اÙ\90شكالات
- را داشته باشند مي‌كنيم. هر نسخه جديدي كه
- ارائه مي‌شود ØØ¯Ø§Ù‚Ù„ يك ماه را در مرØÙ„Ù‡ تست
- بتا مي‌گذراند. ما بر اين باور هستيم كه
- قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
- سيستم‌هاي پايگاه داده قابل توجه است و
- نسخه‌هايي كه تاكنون ارائه شده است نشان
- مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
- Ù…ØÙƒÙ… Ùˆ مطمئن را كه آماده بهره‌برداري است
- داريم.
- پشتيباني
- گروههاي پستي ما امكان ارتباط و تماس به
- گروه بزرگي از برنامه نويسان و كاربران را
- مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
- ديگران كمك كنند. دسترسي مستقيم به
- برنامه‌نويسان و گروههاي كاربران و
- راهنماها و كداصلي باعث مي‌شود كه
- پشتيباني PostgreSQL نسبت به ساير پايگاههاي
- داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
- ارائه خدمات پشتيباني به صورت تجاري نيز
- وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
- section 1.6 مراجعه كنيد.
- قيمت
- هم براي استÙ\81اده تجاري Ùˆ هم غير تجاري هيچ
- هزينه‌اي نبايد پرداخت شود. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
- براي انجام تغييرات در PostgreSQL توسط استÙ\81اده
- كنندگان وجود ندارد به جز مواردي كه در
- ليسانس BSD به آن اشاره شده است.
-1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
-كمك كنم؟
-PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
-كه آن را مديون Marc Fournier‌ است كه اين ساختار را
-ايجاد كرده است.
-كيÙ\81يت يك ساختار براي يك پروژه متن باز بسيار
-اهميت دارد. يك ساختار خوب مي‌تواند مانع از
-ØÙˆØ§Ø¯Ø«ÙŠ Ø´ÙˆØ¯ كه در ØØ±ÙƒØª روبه‌جلوي پروژه خللي
-وارد مي‌كنند.
-البته اين ساختار تشكيلاتي ارزان نيست.
-هزينه‌هاي ثابت ماهانه و روزمره براي
-نگهداري Ùˆ ØÙ\81ظ اين ساختار مورد نياز است. اگر
-شما يا شركت شما مايل است كه از نظر مالي به
-اين ØØ±ÙƒØª كمك كند لطÙ\81اً به سايت
-http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
-اهدا كنيد.
-هر چند در صÙ\81ØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
-است ولي مشاركت عمدتاً براي پشتيباني از
-پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
-اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
-مشخص شده ارسال كنيد.
-اگر يك استÙ\81اده موÙ\81Ù‚ از PostgreSQL سراغ داريد
-لطÙ\81اً آن را به سايت http://advocacy.postgresql.org گزارش
-دهيد.
-
-
-
-سوالات مربوط به استÙ\81اده از پايگاه داده
-2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
-دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
-PostgreSQL‌ وجود دارد.
-براي گرÙ\81تن psqlODBC به سايت
-http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
-كنيد.
-OpenLlink را از اين سايت http://www.openlinksw.com
-مي‌توانيد بگيريد. اين درايور با
-نرم‌اÙ\81زارهاي مختلÙ\81 ODBC كار مي‌كند بنابراين
-شما قادر خواهيد بود با استÙ\81اده از OpenLink روي
-اكثر سكو‌هايي كه نرم‌اÙ\81زارODBC‌دارند بدون
-مشكل به PostgreSQL نيز متصل شويد.
-اين Ù…ØØµÙˆÙ„ به كساني كه Ø§ØØªÙŠØ§Ø¬ به خدمات
-پشتيباني تجاري دارند Ù\81روخته مي‌شود. ولي
-نسخه آزاد اين نرم‌اÙ\81زار هميشه در درسترس
-مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
-2.2) Ú†Ù‡ ابزارهايي براي استÙ\81اده از PostgreSQL‌ با
-صÙ\81ØØ§Øª وب وجود دارد؟
-در سايت http://www.webreview.com براي استÙ\81اده از
-PostgreSQL‌ در صÙ\81ØØ§Øª وب راهنماييهاي خوبي وجود
-دارد.
-براي تركيب Ùˆ استÙ\81اده در صÙ\81ØØ§Øª وب زبان PHP‌ يك
-واسط بسيار مناسب است. اطلاعات بيشتر راجع به
-PHP‌در سايت http://www.php.net وجود دارد.
-مثالهايي نيز با استÙ\81اده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl
-وجود دارد.
-2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ\81يكي دارد؟
-چند نرم اÙ\81زار گراÙ\81يكي براي PostgreSQL‌ وجود دارد
-كه شامل pgAccess درسايت http://www.pgaccess.org و pgAdmin III در
-سايت http://www.pgadmin.org و RHDB Admin در سايت
-http://sources.redhat.com/rhdb و Rekall در سايت
-http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك
-phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود
-دارد كه يك واسط وبي براي مديريت PostgreSQL
-مي‌باشد.
-براي ديدن اطلاعات بيشتر راجع به
-نرم‌اÙ\81زارهاي گراÙ\81يكي براي PostgreSQL به آدرس
-http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
-2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
-PostgreSQL‌ ارتباط برقرار كرد؟
-بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
-PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
-PostgreSQL تعدادي از واسطهاي مورد نياز براي
-ارتباط با پايگاه داده از طريق زبانهاي مختلÙ\81
-آمده است كه در زير ليست آنها را مشاهده
-مي‌كنيد.
- C (libpq)
- Embedded C (ecpg)
- Java (jdbc)
- Python (PyGreSQL)
- TCL (libpgtcl)
-واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
-Drivers/Interfaces وجود دارد.
-
-
-
-سوالات مديريتي
-3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
-از /usr/local/pgsql/ نصب كنم؟
-موقع اجراي دستور configure از گزينه prefix-- استÙ\81اده
-كنيد.
-3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
-كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
-به دلايل مختلÙ\81 ممكن است اين اتÙ\81اق بيÙ\81تد. اما
-در قدم اول شما مطمئن شويد كه كه امكانات
-اضاÙ\81Ù‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
-براي اجرا شدن نياز به استÙ\81اده از امكانات
-ØØ§Ù\81ظه مشترك Ùˆ سماÙ\81ورها دارد.
-3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
-Ø§ØØªÙ…الاً‌ قسمت ايجاد ØØ§Ù\81ظه مشترك در كرنل به
-درستي تنظيم نشده است Ùˆ يا اينكه بايد Ù\81ضاي
-ØØ§Ù\81ظه اشتراكي در كرنل را زياد كرد. ميزان
-دقيق ØØ§Ù\81ظه مشترك مورد نياز بسته به معماري Ùˆ
-Ù†ØÙˆÙ‡ استÙ\81اده از باÙ\81رها توسط برنامه postmaster
-دارد. براي بيشتر سيستم‌ها كه با تنظيمات
-پيش‌Ù\81رض كار مي‌كنند مقدار اين ØØ§Ù\81ظه ØØ¯ÙˆØ¯ 1
-مگابايت است. براي ديدن اطلاعات بيشتر راجع به
-ØØ§Ù\81ظه مشترك Ùˆ سماÙ\81ور به PostgreSQL Administrator's Guide
-مراجعه كنيد.
-3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
-اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
-device باشد به اين معني است كه تعداد سماÙ\81ورهاي
-تنظيم شده در كرنل كاÙ\81ÙŠ نيست. PostgreSQL‌ براي هر
-Ù\81رايندي كه در backend اجرا مي‌شود به يك سماÙ\81ور
-نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
-است كه postmaster را با اعمال Ù…ØØ¯ÙˆØ¯ÙŠØª روي تعداد
-Ù\81رايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
-براي اينكار از گزينه N- و يك عدد كمتر از 32
-استÙ\81اده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
-پارامترهاي SEMMNS, SEMMNI كرنل را اÙ\81زايش دهيم.
-در زمان دسترسي خيلي زياد به پايگاه داده، ‌
-سماÙ\81ورهاي نامعتبر مي‌توانند باعث crash‌ كردن
-سيستم شوند.
-اگر پيغام خطا چيز ديگري باشد Ø§ØØªÙ…الاً به
-دليل آن است كه كرنل از سماÙ\81ورها پشتيباني
-نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
-مديريتي PostgreSQL را مطالعه كنيد.
-3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
-كنترل كنم؟
-به صورت پيش Ù\81رض Ù\81قط از ماشيني كه PostgreSQL روي آن
-در ØØ§Ù„ اجراست مي‌توان با استÙ\81اده از
-سوكت‌هاي يونيكسي به آن متصل شد. ساير
-ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
-آنكه گزينه tcp_sockets در Ù\81ايل postgresql.conf Ù\81عال شده Ùˆ
-همچنين با Ø§ØµÙ„Ø§Ø Ù\81ايل PGDATA/ph_hba.conf هويت‌شناسي
-مبتني بر ميزبان نيز Ù\81عال شود. با اين كار
-مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
-3.6) براي كارايي بالاتر و بهتر پايگاه داده من
-چه تنظيماتي را بايد انجام دهم؟
-به طور ØØªÙ… استÙ\81اده از انديس‌ها باعث بالا
-رÙ\81تن سرعت پاسخ‌گويي به درخواست‌ها خواهد
-شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†ØÙˆÙ‡
-پردازش يك دستور توسط PostgreSQL را مي‌دهد.
-اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
-آنها را با قرار دادن در يك Ù\81ايل با دستور COPY‌
-اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
-است. ØØªÙŠâ€ŒØ§Ù„امكان سعي كنيد از تراكنشها
-استÙ\81اده نكنيد. تراكنشها مجموعه دستوراتي
-هستند كه بيند BEGIN Ùˆ â€\8dCOMMIT مي‌آيند. اگر يك
-دستور به صورت عادي اجرا شود PostgreSQL خود آن
-دستور را به صورت يك تراكنش مستقل نگاه كرده و
-اجرا مي‌كند. موقعی كه تغييرات زيادي در
-پايگاه داده انجام مي‌شود انديسهاي قبلي را
-ØØ°Ù\81 Ùˆ مجدداً‌ ايجاد كنيد.
-استÙ\81اده از گزينه o -F- در Ù\81رمان postmaster باعث غير
-Ù\81عال كردن ()fsync مي‌شود. اين دستور بعد از هر
-تراكنش اطلاعات را روي هاردديسك منتقل
-مي‌كند.
-براي اÙ\81زايش تعداد باÙ\81رهاي ØØ§Ù\81ظه اشتراكي از
-گزينه B- به همراه Ù\81رمان postmaster استÙ\81اده كنيد.
-توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
-است postmaster اصلاً‌ اجرا نشود. هر باÙ\81ر 8 كيلو
-بايت ØØ§Ù\81ظه نياز دارد Ùˆ تعداد باÙ\81رها به طور
-پيش Ù\81رض 64 است.
-همچنين مي‌توان با گزينه S- ميزان ØØ§Ù\81ظه‌اي
-كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
-استÙ\81اده مي‌شود را اÙ\81زايش داد. مقدار پيش Ù\81رض
-512 كيلو بايت است.
-استÙ\81اده از دستور CLUSTER نيز براي بالا بردن
-كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
-بيشتري در اين زمينه به شما مي‌دهد.
-3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
-دارد؟
-PostgerSQL‌ امكانات مختلÙ\81ÙŠ براي گزارش دادن
-وضعيت خود دارد كه براي اشكال زدايي مي‌توان
-از آنها استÙ\81اده كرد.
-با استÙ\81اده از گزينه enable-assert-- تعداد زيادي
-()assert براي مونيتور كردن Ùˆ توقÙ\81 برنامه در صورت
-بروز خطاهاي ناخواسته Ù\81عال مي‌شود.
-هم Postmaster و هم postgres گزينه‌هاي زيادي براي
-اشكال زدايي دارند. موقعي كه postmaster را اجرا
-مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ù\81ايل log
-ارسال كنيد.
- cd /usr/local/pgsql
- ./bin/postmaster >server.log 2>&1 &
-اين كار يك Ù\81ايل log در بالاترين شاخه PostgreSQL‌
-ايجاد مي‌كند. اين Ù\81ايل ØØ§ÙˆÙŠ Ø§Ø·Ù„Ø§Ø¹Ø§Øª Ù…Ù\81يدي
-در مورد مسائل و خطاهايي است كه براي سرور
-اتÙ\81اق اÙ\81تاده است. براي ديدن جزئيات بيشتر
-مي‌توان از d- به همراه Ù\81رمان postmaster‌ استÙ\81اده
-كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
-دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ù\81ايل نوشته
-مي‌شود. با بالابردن اين عدد ØØ¬Ù… اطلاعات
-توليد شده در LogÙ\81ايل نيز اÙ\81زايش مي‌يابد.
-اگر postmaster در ØØ§Ù„ اجرا نباشد، مي‌توانيم postgres
-را به طور مستقيم از خط Ù\81رمان اجرا كرده Ùˆ
-دستورات SQL را به آن بدهيم. اين كار Ù\81قط براي
-اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
-اين ØØ§Ù„ت يك دستور با كاراكتر newline خاتمه پيدا
-مي‌كند و نه با ;. اگر postmaster را با امكانات
-اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
-استÙ\81اده از يك برنامه اشكال‌ياب اجراي
-برنامه را مونيتور كنيد.
-اگر postmaster در ØØ§Ù„ اجرا باشد با دستور psql
-مي‌توان به postgres متصل شد. با پيدا كردن PID
-Ù\81رايند postgres كه psql به آن متصل شده است مي‌توان
-آن را مونيتور كرد. براي اينكار بايد يك
-برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
-بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙ\81ÙŠ
-است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
-مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
-اين Ù\81اصله شما مي‌توانيد برنامه اشكال‌ياب
-را به آن متصل كرده و با قرار دادن يك نقطه
-توقÙ\81 روند اجراي آن را مونيتور كنيد.
-postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
-پيدا كردن اشكالات بسيار مناسب هستند.
-شما مي‌توانيد postgreSQL را با امكانات profiling
-كامپيل كنيد. اين كار باعث مي‌شود كه زمان
-اجراي دقيق هر تابع در برنامه مشخص شود.
-خروجي‌هاي توليد شده در اين ØØ§Ù„ت در Ù\81ايل
-DLINUX_PROFILE. ريخته مي‌شود.
-3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
-وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
-شما بايد ØØ¯Ø§ÙƒØ«Ø± تعداد Ù\81رايندهاي همزمان
-postmaster را اÙ\81زايش دهيد. مقدار پيش Ù\81رض 32 است.
-براي اÙ\81زايش آن مي‌توان از گزينه N- استÙ\81اده
-كرد Ùˆ يا Ù\81ايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
-توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
-باشد بايد مقدار B- را نيز اÙ\81زايش دهيم. اين
-مقدار بايد ØØ¯Ø§Ù‚Ù„ دو برابر مقدار N-‌ باشد.
-براي اعداد خيلي بالا بايد بعضي از
-پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
-پارامترهايي نظير ØØ¯Ø§ÙƒØ«Ø± اندازه ØØ§Ù\81ظه
-اشتراكي SHMMAX ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد سماÙ\81ورها SEMMNI‌ Ùˆ
-SEMMNS ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد Ù\81رايندها NPROCØŒ ØØ¯Ø§ÙƒØ«Ø±
-Ù\81رايندهاي يك كاربر MAXUPRC Ùˆ ØØ¯Ø§ÙƒØ«Ø± Ù\81ايلهاي باز
-NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
-همزمان postgreSQL Ù…ØØ¯ÙˆØ¯ است آن است كه نيازهاي
-PostgreSQL بيش از منابع موجود سيستم نباشد.
-3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
-دراين شاخه Ù\81ايلهاي موقتي قرار دارد كه با
-اجراي درخواستها به وجود آمده است. به عنوان
-مثال اگر براي اجراي دستور order by نياز به انجام
-مرتب سازي باشد Ùˆ در صورتي كه ØØ§Ù\81ظه مشخص شده
-با گزينه S- براي اينكار كاÙ\81ÙŠ نباشد سيستم يك
-Ù\81ايل موقت در اين شاخه ايجاد مي‌كند تا عمل
-مرتب سازي را انجام دهد.
-Ù\81ايلهاي موقت معمولاً به صورت اتوماتيك پاك
-مي‌شود اما اگر postgreSQL در ØÙŠÙ† مرتب سازي crash‌
-كند آن Ù\81ايلها باقي مي‌مانند. با stop Ùˆ start كردن
-برنامه postmaster اين Ù\81ايلها پاك مي‌شوند.
-3.10) چرا براي به روز كردن نسخه پايگاه داده من
-بايد كل داده ها را dump‌ و مجدداً restore كنم؟
-تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
-كه Ù\81قط minor آنها متÙ\81اوت است Ù\81قط تغييرات كوچكي
-اعمال مي‌كنند؛ بنابراين براي به روز كردن از
-نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
-نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
-ساختار داخلي جداول Ùˆ Ù\81ايلهاي داده تغيير
-مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
-براي انتقال داده‌هاي موجود در پايگاه داده
-در اين ØØ§Ù„ت بايد ‌از dump Ùˆ restore استÙ\81اده كرد.
-در نسخه‌هايي كه ساختار روي ديسك تغييري
-نمي‌كند مي توان از برنامه pg_upgrade براي به روز
-كردن پايگاه داده استÙ\81اده كرد بدون اينكه
-نيازي به استÙ\81اده از dump Ùˆ restore باشد. در
-يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
-شده است كه آيا برنامه pg_upgrade براي اين توزيع
-وجود دارد يا خير.
-3.11) از Ú†Ù‡ سخت اÙ\81زاري بايد استÙ\81اده كنم؟
-
-چون اكثر سخت‌اÙ\81زارهاي PC سازگار هستند مردم
-Ù\81كر مي‌كنند كه كيÙ\81يت آنها نيز يكسان است. در
-ØØ§Ù„يكه اينطور نيست. استÙ\81اده از هاردهاي SCSI Ùˆ
-ØØ§Ù\81ظه‌هاي ECC Ùˆ مادربردهاي با كيÙ\81يت بالا
-نسبت به سخت اÙ\81زارهاي ارزانتر نتايج بهتري از
-نظر كارايي و پايداري سيستم بهمراه خواهد
-داشت. PostgreSQL روي بيشتر سخت اÙ\81زارها اجرا
-مي‌شود اما اگر كارايي Ùˆ اطمينان Ù\81اكتورهاي
-مهمي هستند بايد سخت اÙ\81زار مناسب استÙ\81اده شود.
-در گروههاي پستي در مورد سخت اÙ\81زار مناسب Ùˆ
-انتخاب آن Ø¨ØØ« شده است.
-
-
-
-سوالات عملياتي
-4.1) تÙ\81اوت بين binary cursors Ùˆ Normal cursors چيست؟
-راهنماي دستور DECLARE‌ را مطالعه كنيد.
-4.2) من چگونه مي‌توانم Ù\81قط روي چند رديÙ\81 اول يا
-يك رديÙ\81 تصادÙ\81ÙŠ درخواست SELECT‌ بزنم؟
-راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
-در واقع كل درخواست بايد بررسي و ارزيابي شود
-ØØªÙŠ Ø§Ú¯Ø± شما Ù\81قط چند رديÙ\81 اول را بخواهيد. براي
-مثال درخواست ORDER BY را در نظر بگيريد. اگر
-انديس يا نمايه‌اي براي ORDER BY وجود داشته
-باشد،‌postgreSQL‌ ممكن است بتواند Ù\81قط چند سطر
-اول درخواستي را ارزيابي كند و يا اينكه كل
-درخواست پردازش شود تا تعداد رديÙ\81‌هاي
-درخواستي توليد شود.
-براي انتخاب يك سطر تصادÙ\81ÙŠ به روش زير عمل
-مي‌كنيم:
- SELECT col
- FROM tab
- ORDER BY random()
- LIMIT 1;
-4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
-چيزهايي كه در psql‌ وجود دارد را ببينم؟
-براي ديدن ليست جداول دستور dt\ را در برنامه
-psql‌ استÙ\81اده كنيد. براي ديدن ليست كامل
-Ù\81رمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
-برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
-‌قرار دارد. اين Ù\81ايل ØØ§ÙˆÙŠ Ù\81رامين SQLيي است كه
-خروجي را براي دستوراتي كه با \‌در psql شروع
-مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
-گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
-از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
-PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
-با استÙ\81اده از آن اطلاعات داخلي پايگاه داده
-را استخراج كرد.
-4.4) چگونه يك ستون جدول را ØØ°Ù\81 مي‌كنيد؟ چگونه
-نوع داده آن را عوض كنيم؟
-ØØ°Ù\81 يك ستون در توزيع 7.3 با استÙ\81اده از دستور
-ALTER TABLE DROP COLUMN اضاÙ\81Ù‡ شده است. در نسخه‌هاي
-قبلي به روش زير عمل كنيد:
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù\81 كنيد را در اينجا بياوريد
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-براي عوض كردن نوع داده يك ستون به روش زير عمل
-كنيد:
- BEGIN;
- ALTER TABLE tab ADD COLUMN new_col new_data_type;
- UPDATE tab SET new_col = CAST(old_col AS new_data_type);
- ALTER TABLE tab DROP COLUMN old_col;
- COMMIT;
-4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك رديÙ\81،‌ جدول Ùˆ خود
-پايگاه داده چقدر است؟
-Ù…ØØ¯ÙˆØ¯ÙŠØªÙ‡Ø§ عبارتند از:
- ØØ¯Ø§ÙƒØ«Ø± اندازه پايگاه داده Ù†Ø§Ù…ØØ¯ÙˆØ¯ (تا 32 ترابايت وجود دارد)
- ØØ¯Ø§ÙƒØ«Ø± اندازه يك جدول 32 ترابايت
- ØØ¯Ø§ÙƒØ«Ø± ا ندازه يك رديÙ\81 1.6 ترابايت
- ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ù\81يلد 1 گيگا بايت
- ØØ¯Ø§ÙƒØ«Ø± اندازه رديÙ\81هاي يك جدول نا Ù…ØØ¯ÙˆØ¯
- ØØ¯Ø§ÙƒØ«Ø± ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
- ØØ¯Ø§ÙƒØ«Ø± انديسهاي يك جدول نا Ù…ØØ¯ÙˆØ¯
-البته در ØØ§Ù„ت Ù†Ø§Ù…ØØ¯ÙˆØ¯ نيز ما Ù…ØØ¯ÙˆØ¯ به ØØ¬Ù…
-هاردديسك Ùˆ Ù\81ضاي ØØ§Ù\81ظه خواهيم بود. در صورتي
-Ú©Ù‡ مقادير مشخص شده به عنوان Ù†Ø§Ù…ØØ¯ÙˆØ¯ به صورت
-غير معمولي بزرك شوند كارايي سيستم كاهش
-خواهد ياÙ\81ت.
-براي ذخيره كردن جداول با اندازه خيلي بزرگ
-نيازي نيست كه سيستم عامل امكان ايجاد
-Ù\81ايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
-بزرگ به صورت Ù\81ايلهايي به ØØ¬Ù… يك گيگا بايت
-نگاهداري مي‌شوند.
-اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
-قرار دهيم ØØ¯Ø§ÙƒØ«Ø± اندازه جدول Ùˆ ØØ¯Ø§ÙƒØ«Ø± تعداد
-ستونها 4 برابر خواهد شد.
-4.6) چقدر Ù\81ضاي ديسك سخت براي ذخيره كردن
-داده‌‌هاي يك Ù\81ايل متني مورد نياز است؟
-يك پايگاه داده PostgreSQL‌ تا 5 برابر Ù\81ضايي روي
-هاردديسك براي نگاهداري يك Ù\81ايل متني نياز
-دارد.
-به عنوان مثال يك Ù\81ايل با 100000 خط را در نظر
-بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
-متني آمده است. Ù\81رض كنيد كه رشته متني به طور
-متوسط 20 بايت باشد. اندازه Ù\81ايل برابر 2.8 مگا
-بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
-Ù\81ايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
- 32 bytes: اندازه سرايند هر خط به طور تقريبي
- 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
- + 4 bytes: اشاره گر روي صÙ\81ØÙ‡ به يك چندتايي
- ----------------------------------------
- 60 bytes در هر رديÙ\81
-
-اندازه صÙ\81ØØ§Øª داده در PostgreSQL برابر با 8 كيلو بايت است
- 8192 تعداد بايت‌ها در هر صÙ\81ØÙ‡
- ------------------- = 136 تعداد رديÙ\81‌ها در يك صÙ\81ØÙ‡ پايگاه داده
- 60 تعداد بايت‌هاي هر رديÙ\81
-
- 100000 تعداد رديÙ\81ها
- -------------------- = تعدادصÙ\81ØØ§Øª پايگاه داده
- 128 تعداد رديÙ\81ها در هر صÙ\81ØÙ‡
-
-735 تعداد صÙ\81ØØ§Øª * 8192 تعداد بايت‌هاي هر صÙ\81ØÙ‡ = 6,021,120 مگا بايت
-سربار انديسها يا نمايه‌ها از اين مقدار كمتر
-است ولي چون شامل خود داده‌ها هم هست ممکن است
-اندازه آنها هم بزرگ شود.
-NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
-Ù\81ضاي بسيار كمي را اشغال مي‌كنند.
-4.7) چگونه مي‌توانم بÙ\81همم كه Ú†Ù‡ كاربران،‌
-پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ\81
-شده است؟
-psql تعداد زيادي دستور دارد كه با \ شروع
-مي‌شوند و اين اطلاعات را در اختيار ما قرار
-مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
-كنيد. همچنين جداول سيستمي كه با نام آنها pg_
-‌شروع مي‌شود نيز اين اطلاعات را در خود
-دارند. اجراي برنامه psql با گزينه l- نيز باعث
-نشان دادن ليست تمام پايگاههاي داده مي‌شود.
-همچنين Ù\81ايل pgsql/src/tutorial/syscat.source نيز Ù\81رمانهاي
-SELECT كه با استÙ\81اده از آن مي‌توان اطلاعات
-پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
-4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
-چرا از نمايه ها استÙ\81اده نمي‌كنند؟
-به طور معمول براي درخواستها از نمايه‌ها
-استÙ\81اده نمي‌شود. تنها در صورتي از نمايه‌ها
-استÙ\81اده مي‌شود كه اندازه جدول از يك اندازه
-ØØ¯Ø§Ù‚Ù„ بزرگتر باشد Ùˆ درخواست هم Ù\81قط قسمتي از
-رديÙ\81‌هاي جدول را انتخاب كرده باشد. دليل اين
-كار آن است كه دسترسي‌هاي تصادÙ\81ÙŠ به هاردديسك
-كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
-از خواندن مستقيم جدول يا خواندن ترتيبي
-ركوردها كندتر باشد.
-براي تعيين اينكه از نمايه استÙ\81اده شود يا
-خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
-جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
-ANALYZE به دست مي‌آيد. با استÙ\81اده از اين
-اطلاعات،‌ بهينه ساز از تعداد رديÙ\81‌هاي يك
-جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
-تعيين كند كه آيا از نمايه استÙ\81اده شود يا خير.
-اطلاعات آماري همچنين براي تعيين ترتيب Ø§Ù„ØØ§Ù‚
-Ùˆ روشهاي Ø§Ù„ØØ§Ù‚ به صورت بهينه نيز كاربر دارد.
-جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
-همزمان با تغيير داده‌هاي جدول انجام شود.
-نمايه‌ها به طور معمول همراه با دستور ORDER BY
-به كار برده نمي‌شوند. براي يك جدول بزرگ يك
-پيمايش ترتيبي همراه با دستور مرتب سازي از به
-كار بردن نمايه‌ها سريعتر خواهد بود.
-اما اگر همراه با ORDER BY‌ از LIMIT استÙ\81اده شود
-اغلب از نمايه‌ها استÙ\81اده مي‌شود چون Ù\81قط
-قسمتي از جدول استÙ\81اده مي‌شود. در ØÙ‚يقت هر
-چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙ\81اده
-نمي‌كنند ولي مي‌توانيم با استÙ\81اده از دستور
-زير با استÙ\81اده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
-LIMIT‌ آنها را به دست آوريم.
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
-اگر شما Ù\81كر مي‌كنيد كه بهينه ساز سيستم در
-انتخاب پيمايش ترتيبي اشتباه كرده است با
-دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
-استÙ\81اده از نمايه‌ها باعث اÙ\81زايش سرعت
-درخواست‌ها خواهد شد.
-استÙ\81اده از نمايه‌ها هنگامي كه از علائم ويژه
-نظير LIKE Ùˆ ~ استÙ\81اده مي‌كنيد Ù\81قط در بعضي
-شرايط خاصي كه در اينجا ذكر شده است ممكن است:
- ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
- باشد براي مثال:
- دستورات LIKE نبايد با علامت % شروع شوند
- الگوهاي منظمي كه با ~ مي‌ايد ØØªÙ…اً بايد با
- علامت ^ شروع شود
- رشته جستجو نبايد با يك مجموعه از
- كاراكتر‌ها مثل [a-e] شروع شود
- جستجوهاي ØºÙŠØ±ØØ³Ø§Ø³ به متن مثل ILIKE‌ Ùˆ *~ از
- نمايه‌ها استÙ\81اده نمي‌كنند. در عوض از
- توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
- استÙ\81اده مي‌كنند.
- مقدار پيش Ù\81رض locale‌ بايد در initdb استÙ\81اده شود.
-
-4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را
-توسط بهينه‌ساز درخواستها مشاهده كنم؟
-راهنماي دستور EXPLAIN را نگاه كنيد.
-4.10) نمايه R-tree‌ چيست؟
-از نمايه R-Tree براي انديس كردن داده‌هاي
-Ù\81اصله‌اي استÙ\81اده مي‌شود. يك نمايه hash
-نمي‌توانند جستجوهاي Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø±Ø§ انجام
-دهد. نمايه "B-tree" نيز براي انجام جستجوي
-Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø¯Ø± يك جهت قابل استÙ\81اده است. اما
-R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
-پشتيباني كند. براي مثال استÙ\81اده اگر از نمايه
-R-tree‌ براي گونه Point استÙ\81اده شود سرعت
-درخواست‌هايي نظير "select all points within a bounding
-rectangle" به مراتب اÙ\81زايش مي‌يابد.
-مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
-Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching."
-Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
-R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
-پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
-بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
-توسعه R-tree‌ نياز به كار بيشتري دارد.
-4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
-Optimizer)
-استÙ\81اده از GEQO سرعت بهينه سازي درخواست را
-هنگاميكه تعداد زيادي جدول را با استÙ\81اده از
-الگوريتم ژنتيك Ø§Ù„ØØ§Ù‚ مي‌كنيم اÙ\81زايش
-مي‌دهد.
-4.12) چگونه از عبارات منظم براي جستجو استÙ\81اده
-كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن
-نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن
-از نمايه استÙ\81اده كنم؟
-براي جستجوي عبارت منظم از عملگر ~‌ استÙ\81اده
-مي‌كنيم. براي جستجوي غير ØØ³Ø§Ø³ به متن از
-عملگر *~ Ùˆ يا ILIKE‌ استÙ\81اده مي‌كنيم.
-روش ديگر انجام جستجوي غير ØØ³Ø§Ø³ به متن در زير
-نشان داده شده است.
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-اين از نمايه‌هاي استاندارد استÙ\81اده
-نمي‌كند. ولي شما مي توانيد با دستور زير يك
-نمايه ايجاد كنيد Ùˆ از آن استÙ\81اده كنيد.
- CREATE INDEX tabindex ON tab (lower(col));
-4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
-كه يك Ù\81يلد NULL‌ است؟
-با استÙ\81اده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
-NULL بودن يك Ù\81يلد را تست كنيم.
-4.14) تÙ\81اوت بين گونه‌هاي مختلÙ\81 character چيست؟
-Type Internal Name Notes
---------------------------------------------------
-VARCHAR(n) varchar اندازه، ØØ¯Ø§ÙƒØ«Ø± طول را نشان مي دهد بدون اضاÙ\81Ù‡ شدن كاراكتر اضاÙ\81Ù‡
-CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙ\81اده مي‌شود
-TEXT text ØØ¯Ø§ÙƒØ«Ø± طول را مشخص نمي‌كند
-BYTEA bytea آرايه‌اي از بايت با طول متغير
-"char" char يك كاراكتر
-نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
-پيغامهاي خطا مي‌توان ديد.
-چهار گونه اول همگي از نوع varlena هستند (4 بايت
-اول روي ديسك طول را مشخص مي‌كند كه به دنبال
-آن داده‌ها قرار دارند.)‌بنابراين Ù\81ضاي
-واقعي استÙ\81اده شده روي ديسك از اندازه تعريÙ\81
-شده بيشتر است. اما اين گونه‌ها را مي‌توان
-Ù\81شرده كرد كه اينكار باعث مي‌شود Ù\81ضاي كمتري
-روي ديسك اشغال كنند.
-براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
-بهترين انتخاب است. در اين گونه ØØ¯Ø§ÙƒØ«Ø± طول
-رشته Ù…ØØ¯ÙˆØ¯ است بر خلاÙ\81 text كه هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
-روي ØØ¯Ø§ÙƒØ«Ø± اندازه رشته نمي‌گذارد.(در اين
-گونه ØØ¯Ø§ÙƒØ«Ø± طول يك رشته يك گيگا بايت خواهد
-بود)
-گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
-است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
-(خالي) پر مي‌شود تا به طول مشخص شده برسد در
-ØØ§Ù„يكه گونه VARCHAR كاراكترها را به همان صورت
-كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
-داده‌هاي باينري است به خصوص داده‌هاي
-باينتري كه شامل بايت‌هاي NULL هستند. از نظر
-كارايي تمام اين گونه‌ها يكسان هستند.
-4.15.1) چگونه مي‌توانم يك Ù\81يلد سريال يا
-اÙ\81زايشي ايجاد كنم؟
-PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
-براي ايجاد يك Ù\81يلد سريال (براي داشتن يك Ù\81يلد
-Ù…Ù†ØØµØ± به Ù\81رد براي هر رديÙ\81 )به روش زير عمل
-كنيد:
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-دستور بالا به طور اتوماتيک به دستور زير
-تبديل مي‌شود:
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
-براي ديدن اطلاعات بيشتر به راهنماي دستور
-create_sequence مراجعه كنيد. همچنين مي‌توان از
-OID‌هر رديÙ\81 به عنوان يك مقدار Ù…Ù†ØØµØ± به Ù\81رد
-استÙ\81اده كرد. اما در اين ØØ§Ù„ت براي dump كردن Ùˆ
-reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
-با گزينه o-‌ اجرا كنيد.
-4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
-بدانم؟
-يك روش براي گرÙ\81تن مقدار بعدي يك Ù\81يلد سريال
-استÙ\81اده از تابع ()nextval است. در شبه ÙƒÙ\8fدي كه در
-ادامه آمده است روش انجام اين كار نشان داده
-شده است:
- new_id = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-با اجرا دستور Ù\81وق مقدار جديد را در متغير new_id
-نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
-درخواست‌هاي نيز استÙ\81اده كنيد. توجه داشته
-باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
-شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
-در آن table‌ نام جدول Ùˆ serialcolumn نام Ù\81يلد سريال
-جدول مي‌باشد.
-براي ديدن مقدار نسبت داده شده به Ù\81يلد سريال
-نيز مي‌توان از تابع () currval به صورت زير
-استÙ\81اده كرد.
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-و سرانجام شما مي‌توانيد از مقدار OID كه خروجي
-دستور INSERT است براي ديدن مقدار پيش Ù\81رض
-استÙ\81اده كنيد. هر چند اين روش در همه پلتÙ\81رمها
-قابل استÙ\81اده نيست Ùˆ ضمن اينكه Ù\81يلد oid‌ بعد
-از عدد 4 ميليارد دوباره صÙ\81ر مي‌شود. در زبان
-perl با استÙ\81اده از DBI Ùˆ DBD::Pg مقدار oid‌را
-مي‌توانيد به شكل زير استخراج كنيد: بعد از
-اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$
-ذخيره خواهد شد.
-4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
-شرایط race برای سایر کاربران می شوند؟
-خیر، استÙ\81اده از این توابع شرایط race را به
-وجود نمی آورد.
-4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
-شده مجدداً استÙ\81اده نمی شود؟ چرا بین اعداد
-سریالی یک Ù\81اصله خالی ایجاد Ù…ÛŒ شود؟
-برای بالا بردن امکان اجرای همزمان تراکنشها،
-اعداد سریالی به Ù…ØØ¶ اجرای تراکنش به آنها
-تخصیص Ù…ÛŒ یابد در این ØØ§Ù„ت اگر بعضی از
-تراکنشها abort شوند بین اعداد سریالی استÙ\81اده
-شده یک Ù\81اصله خالی به وجود Ù…ÛŒ آید.
-4.16) OID و TID چه هستند؟
-OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه Ù…Ù†ØØµØ± به
-Ù\81رد برای هر ردیÙ\81 است. هر ردیÙ\81 جدیدی Ú©Ù‡ ایجاد
-Ù…ÛŒ شود یک OID Ù…Ù†ØØµØ± به Ù\81رد به آن اختصاص Ù…ÛŒ
-یابد. تمام OIDهایی Ú©Ù‡ در ØÛŒÙ† initdb ایجاد Ù…ÛŒ شوند
-از 16384 کمتر هستند و OIDهایی بعداً تولید می شود
-از این عدد بزرگتر خواهد بود. نکته مهم آن است
-که OIDها نه تنها در یک جدول شبیه نیستند بلکه
-در Ú©Ù„ پایگاه داده هیچ دو ردیÙ\81ÛŒ دارای OID یکسان
-نخواهد بود.
-PostgreSQL از OID در سیستم داخلی خود برای ایجاد
-ارتباط بین ردیÙ\81های جداول مختلÙ\81 استÙ\81اده Ù…ÛŒ
-کند. توصیه می شود که یک ستون از نوع OID برای
-ذخیره این Ù\81یلد در جدول ایجاد کنید. ساختن یک
-نمایه برای این Ù\81یلد باعث دسترسی سریعتر به آن
-خواهد شد.
-تمام پایگاههای داده در PostgreSQL برای گرÙ\81تن OID
-جدید از یک ناØÛŒÙ‡ مرکزی استÙ\81اده Ù…ÛŒ کند. ولی
-اگر بخواهیم OID را به روش دیگری بگیریم و یا
-اینکه در ØÛŒÙ† Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای
-اصلی آن تغییر نکند به روش زیر می توانیم عمل
-کنیم:
-
- CREATE TABLE new_table(mycol int);
- SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
- COPY tmp_table TO '/tmp/pgtable';
- COPY new_table WITH OIDS FROM '/tmp/pgtable';
- DROP TABLE tmp_table;
-OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین ØØ¯Ø§Ú©Ø«Ø±
-مقدار آن 4 میلیارد خواهد بود و بعد از آن
-مقدار آن سرریز خواهد شد. البته تا کنون برای
-کسی این اتÙ\81اق Ù†ÛŒÙ\81تاده است Ùˆ تصمیم گرداندگان
-PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتÙ\81اق رخ دهد
-این مشکل را برطرÙ\81 کنند.
-TIDها برای شناسایی Ù…ØÙ„ Ù\81یزیکی یک ردیÙ\81 بر اساس
-بلوک Ùˆ Ø¢Ù\81ست Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا
-کردن یک ردیÙ\81 Ùˆ یا بازخوانی آن عوض Ù…ÛŒ شوند.
-TIDها توسط نمایه ها استÙ\81اده Ù…ÛŒ شوند.
-4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
-استÙ\81اده مي‌شود چيست؟
-لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استÙ\81اده Ù…ÛŒ
-شوند:
- table, relation, class :کلاس، رابطه، جدول
- row, record, tuple چندتایی، رکورد، ردیÙ\81
- column, field, attribute صÙ\81ت، Ù\81یلد، ستون
- retrieve, select انتخاب، خواندن
- replace, updateبه روز کردن، جایگزینی
- append, insert درج، اضاÙ\81Ù‡ کردن
- OID, serial value مقدار سریال
- portal, cursor
- range variable, table name, table alias
-یک لیست عمومی از ترمهای مورد استÙ\81اده در
-پایگاه داده در آدرس
-http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm
-وجود دارد.
-4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
-مي‌گيرم؟
-این خطا Ø§ØØªÙ…الاً یا به خاطر تمام شدن ØØ§Ù\81ظه
-مجازی سیستم شماست و یا اینکه کرنل برای
-برنامه ها در مورد میزان استÙ\81اده از ØØ§Ù\81ظه
-مجازی Ù…ØØ¯ÙˆØ¯ÛŒØª اعمال کرده است. قبل از اجرای
-برنامه اصلی یکی از دستورات زیر را اجرا کنید.
- ulimit -d 262144
- limit datasize 256m
-بسته به نوع شل یکی از این دستورات ممکن است با
-موÙ\81قیت اجرا شود. با اجرای آن دستور Ù…ØØ¯ÙˆØ¯ÛŒØª
-ØØ§Ù\81ظه مجازی برای برنامه ها برداشته شده Ùˆ با
-این کار Ø§ØØªÙ…الاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
-داده است اجرا خواهد شد.
-4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
-PostgreSQLيي كه من استÙ\81اده مي‌كنم چيست؟
-با اجرای دستور ()SELECT version
-4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها
-خطای "invalid large obj descriptor"به وجود می آید؟
-شما باید قبل از شروع دستوراتی که با large-objectها
-کار می کنند از BEGIN و بعد از آنها هم یک END
-بگذارید. در ØØ§Ù„ ØØ§Ø¶Ø± PostgreSQL هندل large-objectها را
-در زمان نهایی شدن تراکنش (commitشدن) می بندد. به
-همین دلیل اولین تلاش برای انجام هر کاری با
-هندل منجر به خطای invalid large obj descriptor خواهد شد.
-برای جلوگیری از این خطا ØØªÙ…اً باید از یک
-تراکنش استÙ\81اده کنید. این کار همانطور Ú©Ù‡
-قبلاً Ú¯Ù\81ته شد با استÙ\81اده از قرار دادن BEGIN Ùˆ END
-در ابتدا و انتهای دستورات انجام می شود.
-اگر این خطا را در ØÛŒÙ† استÙ\81اده از یک درایور ODBC
-دریاÙ\81ت کردید Ø§ØØªÙ…الاً باید این دستور را
-اجرا کنید: set auto-commit off
-4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
-جاري را به عنوان مقدار پيش‌Ù\81رض داشته باشد؟
-از CURRENT_TIMESTAMP استÙ\81اده کنید در مثال زیر Ù†ØÙˆÙ‡
-انجام این کار نشان داده شده است:
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
-4.22) چرا "زير درخواستهايي" كه از IN استÙ\81اده
-مي‌كنند كند هستند؟
-در نسخه های قبل از 7.4 عمل Ø§Ù„ØØ§Ù‚ زیر درخواست Ùˆ
-درخواست اصلی به این صورت انجام می شود که
-نتایج به دست آمده از زیر درخواست به صورت
-ترتیبی برای هر ردیÙ\81 اعمال Ù…ÛŒ شود. اگر
-زیردرخواست ردیÙ\81 های Ú©Ù…ÛŒ را به عنوان خروجی
-برگرداند Ùˆ درخواست بیرونی ردیÙ\81 های زیادی را
-شامل شود استÙ\81اده از IN بهترین روش است در غیر
-اینصورت بهتر است از EXISTS استÙ\81اده شود
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-به:
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-برای اجرای سریع این درخواست باید برای ستون
-subcol نمایه ایجاد شده باشد.
-در نسخه های بعد از 7.4 IN برای Ø§Ù„ØØ§Ù‚ از همان
-تکنیک پیچیده مورد استÙ\81اده در دستورات معمولی
-استÙ\81اده Ù…ÛŒ کند Ùˆ بنابراین استÙ\81اده از آن نسبت
-به EXISTS ارجØÛŒØª دارد.
-4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join)
-انجام دهم؟
-برای انجام Ø§Ù„ØØ§Ù‚ خارجی به روش زیر عمل کنید:
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-یا
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-درخواستهای بالا t1.col , t2.col را به هم Ø§Ù„ØØ§Ù‚ Ù…ÛŒ
-کند Ùˆ همچنین ردیÙ\81های t1 Ú©Ù‡ نظیر آنها در t2
-نبوده است را نیز برمی گرداند. اگر از RIGHT
-استÙ\81اده شود نتیجه بر عکس است. یعنی ردیÙ\81های t2
-که نظیر آنها در t1 نباشد را نشان می دهد و اگر
-از FULL استÙ\81اده شود نتیجه هم شامل ردیÙ\81های t1
-است Ùˆ هم شامل ردیÙ\81های t2. استÙ\81اده از کلمه OUTER
-اختیاری است چرا که این کلمه به طور ضمنی
-دستورهای LEFT, RIGHT, FULL وجود دارد.
-در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم Ø§Ù„ØØ§Ù‚
-خارجی را به کمک دستورهای UNION, NOT IN شبیه سازی
-کنیم. این کار در مثال زیر نشان داده شده است:
-
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
-داده توليد كرد؟
-در ØØ§Ù„ ØØ§Ø¶Ø± این کار امکان پذیر نیست. PostgreSQL
-Ù\81قط امکان درخواست از پایگاه داده ای را Ù…ÛŒ
-دهد Ú©Ù‡ در ØØ§Ù„ ØØ§Ø¶Ø± به آن متصل باشید Ùˆ نمی
-توان به طور همزمان از دو پایگاه داده استÙ\81اده
-کرد. البته یک برنامه کاربردی خود می تواند به
-طور همزمان دو پایگاه داده را مورد استÙ\81اده
-قرار داده و نتایج را با هم ترکیب کند ولی نمی
-تواند در یک درخواست به هر دو پایگاه داده
-رجوع کند.
-4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ\81
-يا ستون باشد؟
-در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردیÙ\81 یا
-چند ستون باشد. برای دیدن اطلاعات بیشتر به
-سایت زیر مراجعه
-کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions
-4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
-جداول موقت را ايجاد يا ØØ°Ù\81 كرد؟
-PL/PgSQL Ù…ØØªÙˆØ§ÛŒ توابع را ذخیره (cache) Ù…ÛŒ کند. یک
-اثر بد جانبی این کار آن است که اگر در تابع از
-یک جدول موقت استÙ\81اده شود Ùˆ بعداً آن جدول ØØ°Ù\81
-و یک جدول جدید به جای آن ایجاد شود، در
-Ù\81راخوانی مجدد آن تابع، Ù…ØØªÙˆØ§ÛŒ ذخیره شده
-تابع هنوز به جدول قدیمی اشاره می کند و
-بنابراین اجرای تابع با اشکال مواجه می شود.
-راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از
-دستور EXECUTE استÙ\81اده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود
-که درخواست برای هر بار اجرا مجدداً پیمایش و
-تÙ\81سیر شود.
-4.27) چه گزينه‌هايي براي تكرار (replication) وجود
-دارد؟
-There are several master/slave replication options available. These allow only
-the master to make database changes and the slave can only do database reads.
-The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists
-them. A multi-master replication solution is being worked on at
-http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
-4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
- contrib/pgcrypto شامل توابع رمزنگاری زیادی است که
- Ù…ÛŒ توان از آنها در دستورات SQL استÙ\81اده کرد.
- برای رمز کردن ارتباط بین client و server ، پایگاه
- داده ØØªÙ…اً گزینه SSL را بر روی پایگاه داده
- Ù\81عال کنیم.
- در نسخه 7.3 به بعد کلمات عبور کاربران به طور
- اتوماتیک به صورت رمز شده ذخیره می شود ولی
- در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در
- Ù\81ایلpostgresql.conf Ù\81عال کنیم.
- Ù…ÛŒ توان پایگاههای داده را روی یک Ù\81ایل سیستم
- رمزشده نگاهداری کرد
-
-
-
-Extending PostgreSQL
-5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
-اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
-دلایل مختلÙ\81ÛŒ Ù…ÛŒ تواند باعث بروز این مشکل
-شود. اما قبل از همه تابع خود را به صورت جدا
-تست کنید.
-5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
-جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
-داشته باشم؟
-کد خود را به گروه پستی pgsql-hackers ارسال کنید.
-5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
-كه خروجي آن يك ‌tuple (چند تايي) باشد؟
-در نسخه های 7.3 به بعد یک تابع می تواند یک جدول
-را به عنوان خروجی برگرداند. این ویژگی در
-توابعی که به زبانهای C و PL/PgSQL نوشته می شوند
-به طور کامل وجود دارد. راهنما برنامه نویسان
-را مطالعه کنید. یک مثال از Ù†ØÙˆÙ‡ برگرداندن یک
-جدول به عنوان خروجی در contrib/tablefunc آمده است.
-5.4) من يك Ù\81ايل منبع را عوض كرده ام چرا در
-عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
-Makefile برای Ù\81ایلهای include شده وابستگیها را به
-درستی نشان نمی دهد. برای اطمینان از اینکه
-Ù\81ایلی Ú©Ù‡ عوض کرده اید ØØªÙ…اً دوباره کامپیل Ù…ÛŒ
-شود دستور make clean را اجرا کنید. اگر از کامپیلر
-gcc استÙ\81اده Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه
-enable-depend-- در موقع اجرای برنامه configure استÙ\81اده
-کنید این گزینه باعث می شود که وابستگیها به
-طور اتوماتیک تولید شود.
\ No newline at end of file