cwbe coordinatez:
101
792011
5684183
5696454

ABSOLUT
KYBERIA
permissions
you: r,
system: public
net: yes

neurons

stats|by_visit|by_K
source
tiamat
K|my_K|given_K
last
commanders
polls

total descendants::13
total children::3
show[ 2 | 3] flat


ulkas0
jurov0
Harvie0
(nejen) Moje poznamky o praci s grafama v PgSQL.
Nechci si je syslit pro kyberia.cz, treba nekoho budou inspirovat...
A naopak pokud je mezi vami PostgreSQL odbornik, nebojte se inspirovat me :-)

Kyberka uz davno prerostla detskou ohradku MySQL a je potreba se porozhlidnout po necem novym (to na kyberia.cz taky delame). Ja osobne sem vyzkousel spoustu NoSQL databazi (docela me zaujal Riak a myslim si, ze ma do velmi vzdaleneho budoucna potencial), probihali dlouhe diskuze a hadky u piva, zbourali sme nekolik hospod a jeden kostel bylo po nasi diskuzi nutne znovu vysvetit, ale nakonec jsme zjistili, ze vsechny tyhle DB rychlokvasky zatim funguji i pres neutuchajici a temer psychedelicke nadseni svych vyvojaru spise teoreticky nez v praxi a tak jsme zkoncili u stareho dobreho osvedceneho PostgreSQL.

PostgreS forum: https://kyberia.sk/id/4999650/




0000010100792011056841830569645405697212
Harvie
 Harvie      12.12.2010 - 18:14:23 (modif: 12.12.2010 - 18:14:45), level: 1, UP   NEW !!CONTENT CHANGED!!
Neslo by tohle resit pomoci nejaky interni funkce? PgSQL ma funkce to_hex() a encode(), pomoci kterejch se da cislo zakodovat do base 16 a base 64, na base 36 sem nasel jenom tuhle custom funkci:

http://www.rightbrainnetworks.com/blog/base36-conversion-in-postgresql/

CREATE OR REPLACE FUNCTION base36_encode(IN digits bigint, IN min_width int = 0)
  RETURNS varchar AS $$
        DECLARE
			chars char[];
			ret varchar;
			val bigint;
		BEGIN
		chars := ARRAY['0','1','2','3','4','5','6','7','8','9'
			,'A','B','C','D','E','F','G','H','I','J','K','L','M'
			,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
		val := digits;
		ret := '';
		IF val < 0 THEN
			val := val * -1;
		END IF;
		WHILE val != 0 LOOP
			ret := chars[(val % 36)+1] || ret;
			val := val / 36;
		END LOOP;

		IF min_width > 0 AND char_length(ret) < min_width THEN
			ret := lpad(ret, min_width, '0');
		END IF;

		RETURN ret;

END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;

-- -------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION base36_decode(IN base36 varchar)
  RETURNS bigint AS $$
        DECLARE
			a char[];
			ret bigint;
			i int;
			val int;
			chars varchar;
		BEGIN
		chars := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

		FOR i IN REVERSE char_length(base36)..1 LOOP
			a := a || substring(upper(base36) FROM i FOR 1)::char;
		END LOOP;
		i := 0;
		ret := 0;
		WHILE i < (array_length(a,1)) LOOP		
			val := position(a[i+1] IN chars)-1;
			ret := ret + (val * (36 ^ i));
			i := i + 1;
		END LOOP;

		RETURN ret;

END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;

000001010079201105684183056964540569721205697266
ziman
 ziman      12.12.2010 - 18:59:35 , level: 2, UP   NEW
do postgresu mozes afaik pisat funkcie v C

00000101007920110568418305696454056972120569726605697645
Harvie
 Harvie      12.12.2010 - 23:23:29 (modif: 12.12.2010 - 23:26:07), level: 3, UP   NEW !!CONTENT CHANGED!!
vazne? sem newbie :-) to je skvele. cim dal tim vic se mi libi postgres ;)
asi to nejde zapsat primo do SQL dotazu co? ;)
ano jde mi o rychlost...

0000010100792011056841830569645405697212056972660569764505698537
Thunder Perfect Mind
 Thunder Perfect Mind      13.12.2010 - 14:15:59 , level: 4, UP   NEW
do vacsiny znamych db mozes pisat vlastne embedded funkcie v roznych jazykoch (najcastejsie c/c++, obcas dalsie). ci je to dobry napad je druha vec.

000001010079201105684183056964540569721205697266056976450569853705699283
Harvie
 Harvie      13.12.2010 - 20:55:10 , level: 5, UP   NEW
jo... asi se radsi obejdu bez toho... je to jenom takova haluz a zkoumam co vsechno pgsql umi :-)
ukladat v obou tvarech me taky napadlo, ale asi se na to vykaslu a vyresim to v logice aplikace... ono ukladat retezec kterej by reprezentoval desitkovy cislo, ktery je stejne nakonec ulozeny binarne mi prijde trochu prehnany ;) a pokud to nebude vykonostni problem, tak bych se na to radsi vykaslal.

000001010079201105684183056964540569721205697249
maniac
 maniac      12.12.2010 - 18:43:17 , level: 2, UP   NEW
myslis ze to bude pomale? resp preco nechces pouzit vlastnu fciu?

00000101007920110568418305696454056972120569724905698520
Harvie
 Harvie      13.12.2010 - 14:09:27 , level: 3, UP   NEW
a co si myslis o rychlosti ty? dejme tomu, ze to zavolam na ID kazdyho zaznamu co budu selectovat... ja nevim jak kvalitni je interpreter toho plpsql...

0000010100792011056841830569645405697212056972490569852005698599
maniac
 maniac      13.12.2010 - 14:46:08 , level: 4, UP   NEW
myslim ze plpgsql je relativne rychle, ale predpokladam ze nie rychlejsie ako interna funkcia postgresu.
ak mas zaujem o integrovanu funkciu, tak odporucam pozriet contrib adresar v zdrojakoch postgresu. su tam 3rd party funkcie a niektore su velmi jednoduche, t.j. vhodne ako priklad na vytvorenie vlastnej base34 funkcie ( v jazyku C )

aj ked nerad, ale pouzivam takto pgcurl a pgcrypto

0000010100792011056841830569645405697212056972490569852005698540
Thunder Perfect Mind
 Thunder Perfect Mind      13.12.2010 - 14:17:44 , level: 4, UP   NEW
alebo ho ukladat v oboch tvaroch.

0000010100792011056841830569645405696478
Harvie
 Harvie      12.12.2010 - 05:36:00 (modif: 12.12.2010 - 05:38:21) [1K] , level: 1, UP   NEW !!CONTENT CHANGED!!
Zajimavy slidy... resi se stromy, grafy a vykresleni mandelbrotovy mnoziny z PgSQL :-)
http://www.scribd.com/doc/14683319/Trees-and-More-with-PostgreSQL

0000010100792011056841830569645405696455
Harvie
 Harvie      12.12.2010 - 03:36:25 (modif: 12.12.2010 - 04:00:00) [1K] , level: 1, UP   NEW !!CONTENT CHANGED!!
Moje prvni pokusy s ulozenim a traverzovanim grafu v PgSQL:
Volne inspirovano http://www.postgresql.org/docs/8.4/static/queries-with.html -- tabulka CREATE TABLE "graph" ( "id" serial NOT NULL, "link" bigint NOT NULL, "data" text NULL ) -- index -- CREATE INDEX "graph_4d043073083b7" ON "graph" ("id") -- jeste prozkoumat -- insert (jednoduchy cyklicky graf) INSERT INTO "graph" ("id", "link", "data") VALUES ('1', '2', 'test a'), ('2', '4', 'test b'), ('3', '1', 'test c'), ('4', '3', 'test d'), ('7', '1', 'oh hai'), ('1', '7', NULL) -- ------------------------------------------------------------------ -- Tady je rekurzivni query lehce upravena pro potreby kyberky: -- (pokud se zaindexuje i "link", muzeme snadnou upravou traverzovat i v protismeru: od childa k rodicovi) WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS ( SELECT g.id, g.link, g.data, 1, ARRAY[g.id], false FROM graph g WHERE id = 1 -- tohle je ID nody ze ktery zaciname UNION ALL SELECT g.id, g.link, g.data, sg.depth + 1, path || g.id, g.id = ANY(path) FROM graph g, search_graph sg WHERE g.id = sg.link AND NOT cycle ) SELECT * FROM search_graph WHERE cycle != TRUE -- vynechame nodu, ktera zjistila ze cyklime (zbytecne by tam byla znovu) AND depth <= 3 -- hloubku omezime na 3 hrany od startu LIMIT 100 -- celkovy pocet vybranych nod omezime na 100

000001010079201105684183056964540569645506695421
ulkas
 ulkas      13.06.2012 - 11:27:33 , level: 2, UP   NEW
existuje niekde aj grafova nadstavba pre postgres alebo sa to riesi iba takto po vlastnom?

00000101007920110568418305696454056964550669542106695447
Harvie
 Harvie      13.06.2012 - 11:44:08 , level: 3, UP   NEW
zkus pogooglit vid... beztak hadam ze ta nadstavba bude jenom api k tomuhle...

0000010100792011056841830569645405695454
SYNAPSE CREATOR
 dno      11.12.2010 - 12:16:31 [1K] , level: 1, UP   NEW  HARDLINK
PostgreSQL 9.0 High Performance
by Gregory Smith

Accelerate your PostgreSQL system and avoid the common pitfalls that can slow it down

0000010100792011056841830569645405695432
SYNAPSE CREATOR
 dno      11.12.2010 - 11:58:44 (modif: 11.12.2010 - 11:59:55) [1K] , level: 1, UP   NEW  HARDLINK !!CONTENT CHANGED!!
PostgreSQL 9 Administration Cookbook
by Simon Riggs Hannu Krosing

Solve real-world PostgreSQL problems with over 100 simple, yet incredibly effective recipes

0000010100792011056841830569645405557421
SYNAPSE CREATOR
 dno      20.09.2010 - 13:34:32 (modif: 20.09.2010 - 13:36:27), level: 1, UP   NEW  HARDLINK !!CONTENT CHANGED!!
http://www.postgresql.org/docs/9.0/static/release-9-0.html
http://www.postgresql.org/ftp/source/v9.0.0/
juchuuuu :)

0000010100792011056841830569645405257832
SYNAPSE CREATOR
 dno      28.03.2010 - 23:17:16 (modif: 28.03.2010 - 23:19:00) [1K] , level: 1, UP   NEW  HARDLINK !!CONTENT CHANGED!!
http://www.root.cz/clanky/postgresql-9-0-novy-zacatek/
Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.

Pokud nedojde k nečekaným problémům, tak začátkem dubna by mohla být venku beta a někdy začátkem léta ostrá verze...

0000010100792011056841830569645404999650
SYNAPSE CREATOR
 dno      07.11.2009 - 21:49:07 (modif: 17.02.2017 - 21:13:13) [5K] , level: 1, UP   NEW  HARDLINK !!CONTENT CHANGED!!
PostgreSQL

PostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness. It runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). It includes most SQL:2008 data types, including INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. It also supports storage of binary large objects, including pictures, sounds, or video. It has native programming interfaces for C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and exceptional documentation.


Links:





axone neo4j a grafove databazy