2. Common Table Expressions (CTE)
● Basic CTE , Writable CTE , Recursive CTE
●
نوعbasicکارایی بردن بال یا کویری کردن خوانا جهت
WITH
T1 as ( Select * from table1 ),
T2 as ( Select * from table2 )
Select T1.f1 , T2.f2 from T1
inner join T2 on ( T1.f1,T2.f1);
●
نوعwritable!دیگر جدول در درج همزمان جدول یک های رکورد حذف :
WITH t AS (
DELETE FROM ONLY logs_2011 WHERE log_ts < '20110301' RETURNING *
)
INSERT INTO logs_2011_01_02 SELECT * FROM t;
3. Common Table Expressions
● Recursive statement
with recursive fib as (
select 0 as a, 1 as b
union all
select b as a, a+b from fib where a < 100
) select a from fib;
7. Window functions
● row_number , avg , sum , rank
Select row_number() over(order by stno),stno from grades;
SELECT faculty,stno,grade,rank()
OVER ( PARTITION BY faculty order by grade desc )
FROM grades;
SELECT salary, sum(salary) OVER () FROM empsalary;
SELECT salary, sum(salary) OVER (ORDER BY salary)
FROM empsalary;
SELECT sum(salary) OVER w, avg(salary) OVER w
FROM empsalary
WINDOW w AS (PARTITION BY depname ORDER BY salary DESC);
11. JSON & JSONB datatype
Json : stores an exact copy of the input text , slow function
processing because of reparse of each execution.
Jsonb : faster process , store data as decompose binary.
SELECT '{"reading": 1.230e5}'::json, '{"reading": 1.230e5}'::jsonb;
json | jsonb
+
{"reading": 1.230e5} | {"reading": 0.00001230}
(1 row)
19. HStore add & update
● UPDATE tab SET h = h || hstore('c', '3');
● UPDATE tab SET h = delete(h, 'k1');
20. Full Text Search
● Tsvector
SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;
SELECT 'a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11
rat:12'::tsvector;
● Tsquery
select to_tsquery( 'containment:*' );
Select to_tsquery( 'postgres:*' );
SELECT to_tsvector( 'postgraduate' ) @@ to_tsquery( 'postgres:*' );
28. Java Script Functions
CREATE OR REPLACE FUNCTION get_citiy(city_name text)
RETURNS setof cities AS
$BODY$
var plan = plv8.prepare( 'SELECT * FROM cities where name = $1 ',['text'] ) ;
var cursor = plan.cursor([city_name]);
row = cursor.fetch();
cursor.close();
plan.free();
return row;
$BODY$
LANGUAGE plv8 VOLATILE
COST 100;
ALTER FUNCTION get_citiy(city_name text)
OWNER TO postgres;
select get_citiy('mashhad');