Professional Documents
Culture Documents
PostgreSQL SQLKomutları PostgreSQLveSunduklari DevrimGunduz PDF
PostgreSQL SQLKomutları PostgreSQLveSunduklari DevrimGunduz PDF
SQL Nedir?
SQL (Structured Query Language), bir veritaban dilidir. Program gelitiricileri ve Veritaban kullanclar, bir veritabanna veri eklerken, silerken, gncellerken veya sorgularken bu dili kullanrlar. Hem ANSI hem de ISO standard olmasna ramen, ou veritaban program standart dillere ekleme yaparak bu dili kullanmaktadrlar. Kitabn bu blmnde PostgreSQL'in SQL komutlarn inceleyeceiz.
CREATE
PostgreSQL' de nesneleri yaratmak iin CREATE anahtar szcn kullanabilirsiniz. Biz bu blmde temel ilemler olan veritaban ve tablo yaratmay inceleyeceiz. Role/group, fonksiyon, index, schema, sequence, tablespace ve trigger yaratmak ile ilgili szdizimlerini kitabn ilgili blmlerinde ayr ayr bulabilirsiniz. e veritaban yaratmakla balayalm:
CREATE DATABASE
Syntax: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ COLLATE [=] collate ] [ CTYPE [=] ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ]
COLLATE ve CTYPE parametresi 8.4 ile gelen yeni bir zelliktir. Parametreleri inceleyelim: OWNER: Bu parametre ile veritabannn sahibini belirtebilirsiniz. Kullanc yaratma ile ilgili bilgileri kitabn Kullanc ve Yetkilendirme blmnde bulabilirsiniz. TEMPLATE: Bu parametre ile ablon olarak kullanlacak veritabann belirtebilirsiniz. ablon veritabanlar ile ilgili konuyu kitabmzn PostgreSQL Temelleri blmnde bulabilirsiniz. ENCODING: Veritabannn dil kodlamasn verir. COLLATE: Sralama (ORDER BY) ileminde kullanlacak dili belirtir. LC_COLLATE ayarn verir. CTYPE: LC_CTYPE ayarnn yaplmasn salar. Lower(), upper() vs ilemleri iin geerlidir.
TABLESPACE: Veritabannn yaratlaca tablespace'i belirtebilirsiniz. kitabmzn tablespaceler ile ilgili blmnde bulailirsiniz.
Ayrntl bilgiyi
CONNECTION LIMIT: Veritabanna yaplacak e zamanl balant saysn belirtir. imdi de tablo yaratmay renelim:
CREATE TABLE
PostgreSQL' de tablolar rnekleyelim: yaratmak iin CREATE TABLE komutunu kullanabilirsiniz.
pagila=# CREATE TABLE t1 ( c1 serial PRIMARY KEY, c2 varchar(10) ); NOTICE: CREATE TABLE will create implicit sequence "t1_c1_seq" for serial column "t1.c1" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1" CREATE TABLE PostgreSQL' de sadece oturum boyunca geerli olacak geici tablolar yaratabilirsiniz. Geici tablolar sadece o balant iin geerli olur. Dier balantlar, tabloyu yaratan balant ak olsa bile bu tabloyu gremezler. rnek: pagila=# CREATE TEMP CREATE TABLE TABLE t1 (c1 varchar(20)) ;
Tabloyu yaratrken bir kolona ntanml bir deer verebiliriz: [postgres@[local]:test]=# CREATE TABLE t1 (c1 varchar(20), c2 timestamp DEFAULT now()); CREATE TABLE [postgres@[local]:test]=# INSERT INTO t1 VALUES ('Gne Deniz',DEFAULT); INSERT 0 1 [postgres@[local]:test]=# SELECT * from t1; c1 | c2 -------------+---------------------------Gne Deniz | 2009-02-05 02:24:18.609536 (1 row) rnekte de grdmz gibi INSERT aamasnda DEFAULT anahtar szcn kullanrsanz o kolonun ntanml deeri satra girilir. CREATE TABLE komutuna verebileceiz bir parametre ile geici tablolarn davrann kontrol edebilirsiniz. ON COMMIT ile belirtebileceiz bu davran ile aadakileri yapabilirsiniz: PRESERVE ROWS: ntanml olan davrantr. Transaction commit edildikten sonra commit edilen deerlere birey yaplmaz. DELETE ROWS: Transaction commit edildikten sonra commit edilen satr(lar) silinir. DROP: Transaction commit edildikten sonra geici tablo kaldrlr.
rnekleyelim: pagila=# CREATE TEMP TABLE t1 (c1 varchar(20)) ON COMMIT DELETE ROWS; CREATE TABLE pagila=# BEGIN ; BEGIN pagila=# INSERT INTO t1 VALUES ('Gne Deniz'); INSERT 0 1 pagila=# SELECT * from t1; c1 ------------Gne Deniz (1 row) pagila=# commit; COMMIT pagila=# SELECT * from t1; c1 ---(0 rows) Bir de ON COMMIT DROP rnei verelim: pagila=# BEGIN ; BEGIN pagila=# CREATE TEMP TABLE t1 (c1 varchar(20)) ON COMMIT DROP; CREATE TABLE pagila=# INSERT INTO t1 VALUES ('Gne Deniz'); INSERT 0 1 pagila=# SELECT * from t1; c1 ------------Gne Deniz (1 row) pagila=# commit; COMMIT pagila=# SELECT * from t1; ERROR: relation "t1" does not exist LINE 1: SELECT * from t1; Constraint rnei de verelim: test=# CREATE test=# INSERT test=# ERROR: CREATE TABLE t1 (c1 int CHECK (c1 < 20)); TABLE INSERT INTO t1 VALUES (10); 0 1 INSERT INTO t1 VALUES (40); new row for relation "t1" violates check constraint "t1_c1_check"
DROP
CREATE ile yaratlan nesneler DROP ile kaldrlrlar. Szdizimleri genellikle ayndr.
ALTER
PostgreSQL' de birok nesne zerinde ALTER ile deiiklik yapabilirsiniz. Bu blmde veritaban ve tablolar iin ALTER kullanmndan bahsedeceiz. Kalan ksmlar kitabn ilgili blmlerinde ayr ayr anlattm. ncelikle ALTER DATABASE ile balayalm: Syntax: ALTER DATABASE name [ [ WITH ] option [ ... ] ] where option can be: CONNECTION LIMIT connlimit ALTER DATABASE name RENAME TO newname ALTER DATABASE name OWNER TO new_owner ALTER DATABASE name SET TABLESPACE new_tablespace ALTER DATABASE name SET configuration_parameter { TO | = DEFAULT } ALTER DATABASE name SET configuration_parameter FROM CURRENT ALTER DATABASE name RESET configuration_parameter ALTER DATABASE name RESET ALL
value
rneklendirelim. Bir veritaban iin restart gerektirmeyen ayarlar veritabanna zel olarak belirleyebiliriz: pagila=# ALTER DATABASE pagila SET work_mem to 2048; ALTER DATABASE pagila=# SELECT datconfig from pg_database WHERE datname='pagila'; datconfig ----------------{work_mem=2048} (1 row) SET ile ayarladnz yaplandrma ayarlarn RESET ile orijinal haline getirebilirsiniz: pagila=# ALTER DATABASE pagila RESET work_mem ; ALTER DATABASE pagila=# SELECT datconfig from pg_database WHERE datname='pagila'; datconfig ----------(1 row)
Tablo tanmlarn deitirmek iinse ALTER TABLE kullanlr. nce tam szdizimini grelim: Syntax: ALTER TABLE [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ ONLY ] name [ * ] RENAME [ COLUMN ] column TO new_column ALTER TABLE name RENAME TO new_name ALTER TABLE name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] column type [ column_constraint [ ... ] ] DROP [ COLUMN ] column [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column [ SET DATA ] TYPE type [ USING expression ] ALTER [ COLUMN ] column SET DEFAULT expression ALTER [ COLUMN ] column DROP DEFAULT ALTER [ COLUMN ] column { SET | DROP } NOT NULL ALTER [ COLUMN ] column SET STATISTICS integer ALTER [ COLUMN ] column SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ADD table_constraint DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ] DISABLE TRIGGER [ trigger_name | ALL | USER ] ENABLE TRIGGER [ trigger_name | ALL | USER ] ENABLE REPLICA TRIGGER trigger_name ENABLE ALWAYS TRIGGER trigger_name DISABLE RULE rewrite_rule_name ENABLE RULE rewrite_rule_name ENABLE REPLICA RULE rewrite_rule_name ENABLE ALWAYS RULE rewrite_rule_name CLUSTER ON index_name SET WITHOUT CLUSTER SET WITHOUT OIDS SET ( storage_parameter = value [, ... ] ) RESET ( storage_parameter [, ... ] ) INHERIT parent_table NO INHERIT parent_table OWNER TO new_owner SET TABLESPACE new_tablespace rnek olarak, bir tabloya kolon eklemeyi ve karmay grelim: pagila=# ALTER TABLE staff ADD phone_number char(10); ALTER TABLE pagila=# ALTER TABLE staff DROP phone_number ; ALTER TABLE imdi de tabloya constraint eklemeyi ve tablodan constraint kaldrmay grelim: pagila=# ALTER TABLE staff ADD CONSTRAINT store_id_check CHECK (store_id > 0 AND store_id < 10); ALTER TABLE pagila=# ALTER TABLE staff DROP CONSTRAINT store_id_check; ALTER TABLE
SELECT
PostgreSQL, dier tm SQL tabanl veritabanlar gibi, satrlar ekmek iin SELECT ifadesini kullanr. Aada basit bir SELECT tmcesini grebilirsiniz: pagila=# SELECT * from staff; -[ RECORD 1 ]----------------------------------------staff_id | 1 first_name | Mike last_name | Hillyer address_id | 3 email | Mike.Hillyer@sakilastaff.com store_id | 1 active | t username | Mike password | 8cb2237d0679ca88db6464eac60da96345513964 last_update | 2006-05-16 16:13:11.79328 picture | \211PNG\015\012Z\012 -[ RECORD 2 ]----------------------------------------staff_id | 2 first_name | Jon last_name | Stephens address_id | 4 email | Jon.Stephens@sakilastaff.com store_id | 2 active | t username | Jon password | 8cb2237d0679ca88db6464eac60da96345513964 last_update | 2006-05-16 16:13:11.79328 picture |
pagila=# SELECT film_id,language_id FROM film WHERE title ILIKE 'y%'; film_id | language_id ---------+------------995 | 1 996 | 1 997 | 1 (3 rows) imdi de, iinde ay geen filmleri sorgulayalm: pagila=# SELECT film_id,language_id FROM film WHERE title ILIKE '%ay%'; film_id | language_id ---------+------------65 | 1 68 | 1 216 | 1 218 | 1 226 | 1 336 | 1 421 | 1 484 | 1 642 | 1 666 | 1 751 | 1 764 | 1 934 | 1 (13 rows)
JOINLER
temel JOIN tipi vardr: Cross Joinler: ki veri kmesi arasnda Cartesian arpm yapar (apraz arpm da denir). Buna arpm denmesinin nedeni kmeler arasnda bir iliki kurmamasdr. Onun yerine join edilen kmelerin olas her kombinasyonu kaynaklarn birbiri ile arplmas ile bulunarak gsterilir. Inner Joinler: Join edilen kaytlar arasnda belirtilen bir kritere gre iki veri kmesi arasnda Cartesian arpmnn bir alt kmesini yaratr. Belirtilen kriterler satrn join edilen kme iinde olup olmayacan belirten bir boolean deer dndrmelidir. Outer joinler: Inner joinlere benzerdir (iki kme arasnda belirtilen kritere gre veriyi belirler), ama belirtilen kmedeki her satrdan en az bir rnei dndrr. Bu ya bir sol kmedir (JOIN anahtar szcnn solundaki veri kayna), sa kme ( JOIN anahtar szcnn sandaki veri kayna) ya da tm kmeler olabilir -- bu da verilen outer join eidine bal olarak deiir. Satrn bo tarafnda join kriterine uymayan eksik koln deerleri NULL deer olarak dndrlrler.
FROM
city
JOIN
country
ON
last_update
---------+----------------------------+--------------------1 | A Corua (La Corua) 2 | Abha 3 | Abu Dhabi 4 | Acua 5 | Adana 6 | Addis Abeba ... | 2006-02-15 09:45:25 | 2006-02-15 09:45:25 | 2006-02-15 09:45:25 | 2006-02-15 09:45:25 | 2006-02-15 09:45:25 | 2006-02-15 09:45:25
pagila=# SELECT title,rating FROM inventory LEFT JOIN rental USING (inventory_id) LEFT JOIN film ON (inventory.film_id = film.film_id) WHERE rental.return_date IS NULL; Bir rnek daha verelim: SELECT title,rating FROM inventory LEFT JOIN rental USING (inventory_id) LEFT JOIN film ON (inventory.film_id = film.film_id) WHERE rental.return_date IS NULL;
ktlar sralamak
PostgreSQL' de ktlar sralamak iin bir SQL standart szc olan ORDER BY kullanlr. Kullanm basittir:
pagila=# SELECT first_name, last_name FROM staff ORDER BY first_name; first_name | last_name ------------+----------Jon Mike | Stephens | Hillyer
ktlar gruplamak
PostgreSQL' de ktlar gruplamak iin GROUP BY kullanlr:
pagila=# SELECT staff_id from rental GROUP BY staff_id; staff_id ---------1 2 (2 rows)
Aggregate fonksiyonlar
Aggregate fonksiyonlar verilerinizin tiplerini renmek iin kullanabilirsiniz. Aadaki rnekte 1. elemann ka ev kiraladn bulabilirsiniz:
pagila=# SELECT count(*) FROM rental WHERE staff_id = 1; count ------8040 (1 row) Bunu GROUP BY ile eitlendirelim:
pagila=# SELECT count(staff_id),staff_id FROM rental GROUP BY staff_id; count | staff_id -------+---------8040 | 8004 | (2 rows) 1 2
View kavram
Viewlar saklanm sorgular olarak adlandrlabilirler. Birok ama iin kullanlabilirler. rnein normalize edilmemi veri kmesi zerine tanmlanacak bir view ile JOINleri ve WHERE szcklerini dzgn kullanp sanal bir normalizasyon yapabilirsiniz. Aada pagila veritabannda film listesini veren viewu grebilirsiniz: SELECT film.film_id AS fid, film.title, film.description, category.name AS category, film.rental_rate AS price, film.length, film .rating, group_concat((((actor.first_name)::text || ' '::text) || (actor.last_name)::text)) AS actors FROM ((((category LEFT JOIN film_category ON ((category.category_ id = film_category.category_id))) LEFT JOIN film ON ((film_category.film_id = film.film_id))) JOIN film_actor ON ((film.film_id = film_actor.film_id))) JOIN actor ON ( (film_actor.actor_id = actor.actor_id))) GROUP BY film.film_id, film.title, film.description, category.name, film.rental_rate, film.length, film.rating; Viewlar SELECT ifadeleri iin bir tablo gibi davranrlar -- yani viewlar zerinde dier tablolar gibi JOIN ve WHERE kullanabilirsiniz. Ancak tablolardan farkl olarak viewlar indexlenmezler. Index gereksinmeniz varsa bunlar VIEW iindeki tablolarda yaratmalsnz.
pagila=# SELECT name FROM language WHERE language_id = (SELECT language_id FROM film WHERE film_id = 3); name ---------------------English (1 row)
Bir rnek daha verelim: pagila=# SELECT first_name,last_name FROM customer WHERE customer_id IN (SELECT distinct(customer_id) FROM rental);
pagila=# SELECT distinct(first_name,last_name) FROM customer JOIN rental ON (rental.customer_id = customer.customer_id); Peki neden JOIN alternatifini anlattm? Subselectleri okumak ve yazmak kolaydr; ancak zellikle veriler bydke subselectler JOIN lere gre her zaman daha yavatr.
UPDATE
Bir UPDATE sorgusu bir tablodaki veriyi belirtilen yeni deerle deitirir. PUCU: UPDATE ilemlerinizi her zaman ekilde veri kaybnn nne geersiniz. rnek verelim: yapn.
bir
transaction
iinde
Bu
pagila=# BEGIN ; BEGIN pagila=# SELECT name from language WHERE language_id = 3; name ---------------------Japanese (1 row)
pagila=# UPDATE language SET name = 'Trke' WHERE language_id = 3; UPDATE 1 pagila=# SELECT name from language WHERE language_id = 3; name ---------------------Trke (1 row)
Command:
UPDATE
Description: update rows of a table Syntax: UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression | DEFAULT } | ( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ FROM fromlist ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] Yani aslnda UPDATE kullanm daha genitir. rnek verelim:
language
SET
name
'Japanese'
WHERE
UPDATE 1
DELETE
DELETE ile bir tablodan satr ya da satrlar silebilirsiniz. Yine psql' den yardm alalm:
Description: delete rows of a table Syntax: DELETE FROM [ ONLY ] table [ [ AS ] alias ] [ USING usinglist ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
PUCU: DELETE ilemlerinizi de UPDATE ilemleriniz gibi her zaman transaction iinde yapn. Bu ekilde veri kaybnn nne geersiniz. Giri seviyesinde bir DELETE tmcesi yazalm:
bir
[postgres@[local]:pagila2]=# DELETE FROM payment; DELETE 16049 Grdnz gibi, dz bir DELETE tmcesi ile tablodaki tm kaytlar silinir. Ancak bu aamada bir sonraki TRUNCATE maddesini okumanz neriyorum. imdi DELETE sorgusuna koul verelim:
pagila=# DELETE FROM payment WHERE payment_date < '2007-04-01'; DELETE 9113 Grdnz gibi sttekinden daha az sayda satr silindi. RETURNING kullanarak silinen satrlar ile ilgili istediimiz bilgileri alabiliriz:
pagila=# DELETE FROM payment WHERE payment_date < '2007-05-01' RETURNING payment_id; DELETE sildii her bir satr l olarak iaretler; dolaysyla DELETE ileminin arkasndan VACUUM altrmak gereklidir. VACUUM ile ilgili bilgileri kitabmzn ilgili blmnde bulabilirsiniz.
TRUNCATE
Hazr DELETE szcnden bahsetmiken, TRUNCATE' den de bahsetmek gerekli. TRUNCATE tablo ya da tablolardaki tm satrlar siler. DELETE ileminden farkl olarak tabloyu taramad iin ok daha hzldr. Ayrca, yine DELETE ileminden farkl olarak sildii satrlar l olarak iaretlemeden dorudan iletim sistemine verdii iin VACUUM ilemine gerek kalmaz. ncelikle yine kullanmn grelim: Syntax: TRUNCATE [ TABLE ] name [, ... ] [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ] IDENTITY ile ilgili blmler PostgreSQL 8.4 ile gelen zelliktir; eski srmlerde yoktur. TRUNCATE komutu, zerinde alt tabloda ACCESS EXCLUSIVE lock alr. Bu konuda dikkatli olmak gereklidir. Bir dier konu da bu ilemin ON DELETE triggerlar yerine ON TRUNCATE triggerlarn altracak olmasdr. 8.4 ile gelen RESTART/CONTINUE IDENTITY ise TRUNCATE ileminden sonra tabloda (eer
varsa) sequence'larn batan balatlp balatlmayacan belirtir. ntanml deer batan balatlmamasdr (CONTINUE IDENTITY). RESTART IDENTITY ile ilgili bir rnek verelim: [postgres@[local]:test]=# CREATE TEMP TABLE truncatetest (id serial); NOTICE: CREATE TABLE will create implicit sequence "truncatetest_id_seq" for serial column "truncatetest.id" CREATE TABLE [postgres@[local]:test]=# INSERT INTO truncatetest VALUES (DEFAULT), (DEFAULT),(DEFAULT); INSERT 0 3 [postgres@[local]:test]=# SELECT * from truncatetest; id ---1 2 3 (3 rows) [postgres@[local]:test]=# TRUNCATE truncatetest RESTART IDENTITY; TRUNCATE TABLE [postgres@[local]:test]=# INSERT INTO truncatetest VALUES (DEFAULT); INSERT 0 1 [postgres@[local]:test]=# SELECT * from truncatetest; id ---1 (1 row) Eer CONTINUE IDENTITY kullansaydk, durum tabii ki farkl olacakt: [postgres@[local]:test]=# TRUNCATE truncatetest CONTINUE IDENTITY; TRUNCATE TABLE [postgres@[local]:test]=# INSERT INTO truncatetest VALUES (DEFAULT); INSERT 0 1 [postgres@[local]:test]=# SELECT * from truncatetest; id ---4 (1 row)
SET
PostgreSQL'de baz parametreleri alma annda deitirmek olasdr. SET -- change a run-time parameter
Synopsis
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
Description
The SET command changes run-time configuration parameters. Many of the run-time
parameters listed in Chapter 18 can be changed on-the-fly with SET. (But some require superuser privileges to change, and others cannot be changed after server or session start.) SET only affects the value used by the current session. If SET (or equivalently SET SESSION) is issued within a transaction that is later aborted, the effects of the SET command disappear when the transaction is rolled back. Once the surrounding transaction is committed, the effects will persist until the end of the session, unless overridden by another SET. The effects of SET LOCAL last only till the end of the current transaction, whether committed or not. A special case is SET followed by SET LOCAL within a single transaction: the SET LOCAL value will be seen until the end of the transaction, but afterwards (if the transaction is committed) the SET value will take effect. The effects of SET or SET LOCAL are also canceled by rolling back to a savepoint that is earlier than the command. If SET LOCAL is used within a function that has a SET option for the same variable (see CREATE FUNCTION), the effects of the SET LOCAL command disappear at function exit; that is, the value in effect when the function was called is restored anyway. This allows SET LOCAL to be used for dynamic or repeated changes of a parameter within a function, while still having the convenience of using the SET option to save and restore the caller's value. However, a regular SET command overrides any surrounding function's SET option; its effects will persist unless rolled back.
Parameters
SESSION Specifiesthatthecommandtakeseffectforthecurrentsession.(Thisisthedefaultifneither SESSIONnorLOCALappears.) LOCAL Specifiesthatthecommandtakeseffectforonlythecurrenttransaction.AfterCOMMITor ROLLBACK,thesessionlevelsettingtakeseffectagain.NotethatSET LOCALwillappearto havenoeffectifitisexecutedoutsideaBEGINblock,sincethetransactionwillend immediately. configuration_parameter Nameofasettableruntimeparameter.AvailableparametersaredocumentedinChapter18and below. value Newvalueofparameter.Valuescanbespecifiedasstringconstants,identifiers,numbers,or commaseparatedlistsofthese,asappropriatefortheparticularparameter.DEFAULTcanbe writtentospecifyresettingtheparametertoitsdefaultvalue(thatis,whatevervalueitwould
havehadifnoSEThadbeenexecutedinthecurrentsession).
Besides the configuration parameters documented in Chapter 18, there are a few that can only be adjusted using the SET command or that have a special syntax:
NAMES SET NAMES valueisanaliasforSET client_encoding TO value. SEED Setstheinternalseedfortherandomnumbergenerator(thefunctionrandom).Allowedvalues arefloatingpointnumbersbetween0and1,whicharethenmultipliedby2311. Theseedcanalsobesetbyinvokingthefunctionsetseed:
SELECT setseed(value);
TIME ZONE SET TIME ZONE valueisanaliasforSET timezone TO value.ThesyntaxSET TIME ZONEallowsspecialsyntaxforthetimezonespecification.Hereareexamplesofvalid values: 'PST8PDT' ThetimezoneforBerkeley,California. 'Europe/Rome' ThetimezoneforItaly. -7 Thetimezone7hourswestfromUTC(equivalenttoPDT).Positivevaluesareeastfrom UTC. INTERVAL '-08:00' HOUR TO MINUTE Thetimezone8hourswestfromUTC(equivalenttoPST). LOCAL DEFAULT Setthetimezonetoyourlocaltimezone(thatis,theserver'sdefaultvalueoftimezone; ifthishasnotbeenexplicitlysetanywhere,itwillbethezonethattheserver'soperating systemdefaultsto). SeeSection8.5.3formoreinformationabouttimezones.
Notes
The function set_config provides equivalent functionality; see Section 9.23. Also, it is possible to UPDATE the pg_settings system view to perform the equivalent of SET.
Examples
Set the schema search path: SET search_path TO my_schema, public; Set the style of date to traditional POSTGRES with "day before month" input convention: SET datestyle TO postgres, dmy; Set the time zone for Berkeley, California: SET TIME ZONE 'PST8PDT'; Set the time zone for Italy: SET TIME ZONE 'Europe/Rome';
Compatibility
SET TIME ZONE extends syntax defined in the SQL standard. The standard allows only numeric time zone offsets while PostgreSQL allows more flexible time-zone specifications. All other SET features are PostgreSQL extensions.