...

или внеочередные заметки


[sticky post]Случайные фотки
trekking, Himalaya
obartunov
Этот пост - моя фоторамка. Весь дневник так или иначе построен вокруг моих впечатлений, которые я попытался сохранить в своих фотографиях. Можно подписаться на rss.
Oleg Bartunov - View my most interesting photos on Flickriver
ненужные подробности для историиCollapse )
Tags:

Вершины крупным планом
trekking, Himalaya
obartunov
Решил собрать здесь вершины гор, снятые мною крупным планом. Буду потихоньку добавлять, поэтому пусть этот пост повисит немного. Пока добавил фотографии из района Эвереста.
Upd. Добавил фотографии из Пакистана.

Read more...Collapse )

Friendly interface for Postgres95
trekking, Himalaya
obartunov
One of my first post to postgres community. Who now remember NCSA Mosaic ? Interesting,
that wdb-p95 is still working http://www.sai.msu.su/cgi-bin/wdb/sn/sn.sncat/form

From megera@sai.msu.su Mon Sep 11 12:06:07 1995
Date: Mon, 11 Sep 1995 12:06:06 +0400 (MSK DST)
From: "O.Bartunov" <megera@sai.msu.su>
X-Sender: megera@ra
To: postgres <postgres95@nobozo.cs.berkeley.edu>
Subject: Q: Friendly interface for Postgres95
Message-ID: <pine.sv4.3.91.950911113736.16173a-100000@ra>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Status: O
X-Status:

Hi,
now when postgres95 v.1.0 installed and passed all tests (without regex :-()
on my Sparc 10/51 (Solaris 2.4) I'd like to have some friendly
interface to generate forms, reports. My users prefer to have an access
to postgres95 from PC-box (Dos or Windows). I try to find something in
Internet but failed. Does anybody know the friendly way for communication
with postgres5 from unix, Xwindows, MS-windows ?
I installed wdb-p95  - WWW interface to postgres95. It looks great and
it's possible via Netscape/Mosaic to talk with postgres95 from MsWindows,
but I'm not sure whether wdb-p95 provide a possibility to insert/edit
data or not. Also I'd like to know how to convert data from postgres95
to another database and vice versa.
        Hope you're not tired,
                Oleg Bartunov

_____________________________________________________________________________
Oleg Bartunov - researcher, hostmaster
Sternberg Astronomical Institute, Moscow University
(095)939-16-83, oleg@sai.msu.su, Moscow, Russia
-----------------------------------------------------------------------------
Tags: , ,

Wildcard query for jsonb
trekking, Himalaya
obartunov
Imagine, you want to find some value in jsonb data , but the only thing you know is the name of the key. For example, shop aggregator, which combines different hierarchies of goods, where some keys may be on different places.

Consider this unstructured data of type jsonb and query 'find something with "color":"red"'(I used this example several years ago to illustrate jsquery).

              Table "public.js_test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
 value  | jsonb   |           |          |


SELECT * FROM js_test;
 id |                                 value
----+-----------------------------------------------------------------------
  1 | [1, "a", true, {"b": "c", "f": false}]
  2 | {"a": "blue", "t": [{"color": "red", "width": 100}]}
  3 | [{"color": "red", "width": 100}]
  4 | {"color": "red", "width": 100}
  5 | {"a": "blue", "t": [{"color": "red", "width": 100}], "color": "red"}
  6 | {"a": "blue", "t": [{"color": "blue", "width": 100}], "color": "red"}
  7 | {"a": "blue", "t": [{"color": "blue", "width": 100}], "colr": "red"}
  8 | {"a": "blue", "t": [{"color": "green", "width": 100}]}
  9 | {"color": "green", "value": "red", "width": 100}
(9 rows)



Variant 1 - Standard SQL (pretty complex)

WITH RECURSIVE t (id,VALUE) AS (
    SELECT
        *
    FROM
        js_test
    UNION ALL (
            SELECT
                t.id,
                COALESCE (kv.value, e.value) AS VALUE
            FROM
                t
            LEFT JOIN LATERAL jsonb_each ( 
                CASE
                    WHEN jsonb_typeof (t.value) = 'object' THEN t.value
                    ELSE NULL
                END
            ) kv
        ON TRUE
        LEFT JOIN LATERAL jsonb_array_elements ( 
                CASE
                   WHEN jsonb_typeof (t.value) = 'array' THEN t.value
                   ELSE NULL
                END
        ) e 
        ON TRUE
    WHERE
        kv.value IS NOT NULL
        OR e.value IS NOT NULL)
)
SELECT js_test.*
FROM (
        SELECT
            id
        FROM
            t
        WHERE
            VALUE @> '{"color": "red"}'
        GROUP BY id
) x
JOIN js_test ON js_test.id = x.id;

 id |                                 value
----+-----------------------------------------------------------------------
  2 | {"a": "blue", "t": [{"color": "red", "width": 100}]}
  3 | [{"color": "red", "width": 100}]
  4 | {"color": "red", "width": 100}
  5 | {"a": "blue", "t": [{"color": "red", "width": 100}], "color": "red"}
  6 | {"a": "blue", "t": [{"color": "blue", "width": 100}], "color": "red"}
(5 rows)



Variant 2: jsquery (elegant query, but not standard way)

SELECT * FROM js_test WHERE value @@ '*.color = "red"'::jsquery;



Variant 3: Use our extension (** for any level) of jsonpath specification to a new SQL/JSON from SQL-2016.

SELECT * FROM js_test WHERE JSON_EXISTS( value,'$.**.color ? (@ == "red")');
 id |                                 value
----+-----------------------------------------------------------------------
  2 | {"a": "blue", "t": [{"color": "red", "width": 100}]}
  3 | [{"color": "red", "width": 100}]
  4 | {"color": "red", "width": 100}
  5 | {"a": "blue", "t": [{"color": "red", "width": 100}], "color": "red"}
  6 | {"a": "blue", "t": [{"color": "blue", "width": 100}], "color": "red"}
(5 rows)
 id |                                value
----+----------------------------------------------------------------------
  5 | {"a": "blue", "t": [{"color": "red", "width": 100}], "color": "red"}
(1 row)


More general syntax includes specification of range of levels to search, for example:

SELECT * FROM js_test WHERE JSON_EXISTS( value,'$.**{0,}.color ? (@ == "red")');

Tags: , ,

Бегом на холм
trekking, Himalaya
obartunov
Спустившись с горы Масада мы сели в машину и поехали к Мертвому морю, где хотели немного покупаться. Буквально через пару минут я вдруг понял, что хочу залезть на те песчаники, которые видел сверху. Миша снял нас с функцией замедления как мы по-пацански забежали на песчаник. Место красивое и хорошее, было много радости у нас. Хотелось бы погоняться в тех местах. Видео получилось уж больно замедленным, хотелось бы его немного ускорить.

Tags: ,

json vs jsonb in one query
trekking, Himalaya
obartunov
PostgreSQL has two json data types - json (string) and jsonb (binary) data types. The differences between these data types can be revealed from this query.

SELECT j::json AS json, j::jsonb AS jsonb FROM 
(SELECT '{"cc":0, "aa":  2, "aa":1,"b":1}' AS j) AS foo;
               json               |           jsonb
----------------------------------+----------------------------
 {"cc":0, "aa":  2, "aa":1,"b":1} | {"b": 1, "aa": 1, "cc": 0}
(1 row)


* json: textual storage «as is»
* jsonb: no whitespaces
* jsonb: no duplicate keys, last key win
* jsonb: keys are sorted (by length, then by key name)

It's possible to write queries using SQL/JSON implementation:


SELECT JSON_OBJECT('cc' VALUE 0, 'aa':  2, 'aa':1,'b':1  RETURNING JSON) as json;
                  json
-----------------------------------------
 {"cc" : 0, "aa" : 2, "aa" : 1, "b" : 1}

SELECT JSON_OBJECT('cc':0, 'aa':  2, 'aa':1,'b':1  RETURNING JSONB) as jsonb;
           jsonb
----------------------------
 {"b": 1, "aa": 1, "cc": 0}

Tags: , ,

Full-Text Search in PostgreSQL. A Gentle Introduction.
trekking, Himalaya
obartunov
Исторический пост.

2007 год.


Read more...Collapse )
Tags: ,

Неожиданное видео из прошлого
trekking, Himalaya
obartunov
Вот так бывает, покупаешь камеру, играешься, а потом забываешь. А она тебя снимала. Камеру покупал для похода в Непале в 2011 году, видео обнаружил случайно. Интересно было посмотреть на себя через 6 лет.

Tags:

Еще раз о Google Summer of Code
trekking, Himalaya
obartunov
Я уже писал про Google Summer of Code (GSoC), что это прекрасная возможность для студентов и аспирантов попробовать себя в опенсорсе. Сегодня наткнулся на свою фотографию в гугловой майке из которой видно, что я был гугловым ментором от постгреса в самый первый год этой программы (2006 год), а руководил я работой Сергея Копосова, нашим студентом, который работал над дипломом в нашем отделе. Надо сказать, что тогда формальности было меньше, Сергей Копосов совершенно самостоятельно работал над проектом "Enhanced Aggregate Support" и начиная с версии 8.2 результаты этого проекта доступны пользователям. Сергей был одним из 12 российских студентов (всего 630), которых приняли в GSoC в 2006 году.

Группа российских астрономов в Праге, 2006. Сергей Копосов слева.


Если в студент-аспирант и хотите попробовать свои силы, принести пользу опенсорсу, то вот вам хорошая возможность, а если вы владеете языком "C" и имеется интерес к алгоритмам и серверному программированию, то можете обращаться к нам в Postgres Professional, где работают много постгресовых разработчиков и которые помогут вам с темой и менторством.
Read more...Collapse )
Tags: , , ,

Build postgres documentation with brew
trekking, Himalaya
obartunov
Official documentation how to build postgres documentation requires a set of tools, which should be installed. Some years ago I tested this way under Linux and it worked to me, but now I use Mac OS X and brew and the whole process could be done much easier.


Read more...Collapse )
Tags: ,

?

Log in