]> Untitled Git - articles.git/commitdiff
Заметка про taint-анализ PostgreSQL. Первый вариант
authorNikolay Shaplov <dhyan@nataraj.su>
Sun, 5 Jul 2026 19:56:00 +0000 (22:56 +0300)
committerNikolay Shaplov <dhyan@nataraj.su>
Sun, 5 Jul 2026 19:56:00 +0000 (22:56 +0300)
17 files changed:
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_1.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_2.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_3.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_file.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_resources.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_wal.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_resources.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_unix-read.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_pipe-read.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_resources.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_unix-write.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_resources.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_unix-write.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_resources.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_tty1-write.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_unix-read.png [new file with mode: 0644]
SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.md [new file with mode: 0644]

diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_1.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_1.png
new file mode 100644 (file)
index 0000000..bc293fa
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/callstack_in_1.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_2.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_2.png
new file mode 100644 (file)
index 0000000..14a7180
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/callstack_in_2.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_3.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/callstack_in_3.png
new file mode 100644 (file)
index 0000000..efe10e0
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/callstack_in_3.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_file.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_file.png
new file mode 100644 (file)
index 0000000..9da2fbc
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/disk_checkpointer_file.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_resources.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_checkpointer_resources.png
new file mode 100644 (file)
index 0000000..aec3c3d
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/disk_checkpointer_resources.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_wal.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/disk_wal.png
new file mode 100644 (file)
index 0000000..b281650
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/disk_wal.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_resources.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_resources.png
new file mode 100644 (file)
index 0000000..cb9c45e
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/in_postgres_resources.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_unix-read.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_postgres_unix-read.png
new file mode 100644 (file)
index 0000000..73b107c
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/in_postgres_unix-read.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_pipe-read.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_pipe-read.png
new file mode 100644 (file)
index 0000000..74dc36f
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/in_psql_pipe-read.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_resources.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_resources.png
new file mode 100644 (file)
index 0000000..ee25c6d
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/in_psql_resources.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_unix-write.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/in_psql_unix-write.png
new file mode 100644 (file)
index 0000000..3fd0559
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/in_psql_unix-write.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_resources.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_resources.png
new file mode 100644 (file)
index 0000000..df826a8
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/out_postgres_resources.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_unix-write.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_postgres_unix-write.png
new file mode 100644 (file)
index 0000000..5c8c6d1
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/out_postgres_unix-write.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_resources.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_resources.png
new file mode 100644 (file)
index 0000000..7eb3488
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/out_psql_resources.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_tty1-write.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_tty1-write.png
new file mode 100644 (file)
index 0000000..ba7449c
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/out_psql_tty1-write.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_unix-read.png b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.imgs/out_psql_unix-read.png
new file mode 100644 (file)
index 0000000..3a4dc3d
Binary files /dev/null and "b/SDL/2025-04 Taint-\320\260\320\275\320\260\320\273\320\270\320\267 \321\201\321\200\320\265\320\264\321\201\321\202\320\262\320\260\320\274\320\270 Natch. \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\274 \320\275\320\260 \320\275\320\265\320\261\320\260\320\275\320\260\320\273\321\214\320\275\321\213\321\205 \320\277\321\200\320\270\320\274\320\265\321\200\320\260\321\205/3. PostgreSQL.imgs/out_psql_unix-read.png" differ
diff --git a/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.md b/SDL/2025-04 Taint-анализ Ñ\81Ñ\80едÑ\81Ñ\82вами Natch. Ð\97накомÑ\81Ñ\82во Ñ\81 инÑ\81Ñ\82Ñ\80Ñ\83менÑ\82ом на небаналÑ\8cнÑ\8bÑ\85 пÑ\80имеÑ\80аÑ\85/3. PostgreSQL.md
new file mode 100644 (file)
index 0000000..4c199cb
--- /dev/null
@@ -0,0 +1,375 @@
+## PostgreSQL
+
+PostgreSQL -- мощная современная СУБД со свободным и открытым исходным кодом.
+В отличие от предыдущих двух исследуемых проектов то как устроен внутри себя PostgreSQL я знаю не по наслышке.
+Поэтому у нас будет возможность сравнить результаты которые покажет Natch с фактическим знанием о том как распространяются данные через подсистемы проекта
+В PostgreSQL поддерживаются различные сложные, составные, типы данных.
+В рамках данного исследования предлагается взять строковое представление одного их таких типов данных и проследить как строковые константы из этого типа перейдут из текстового представление в представление внутреннее и как это внутреннее представление будет сохранено на диск.
+
+### План эксперимента
+
+* Соберем PostgreSQL с отладочной информацией
+* В качестве исследуемого типа данных, выберем тип данных `[tsvector](https://www.postgresql.org/docs/current/datatype-textsearch.html)`, так как он с одной стороны содержит в себе набор отдельных строковых констант, за которыми будет удобно наблюдать в режиме помеченных данных, а с другой стороны тип данных сам по себе не является излишне сложным.
+* Сохраним строковое представление константы типа `tsvector` в отдельный файл. Данные из этого файла в нашем эксперименте Natch будет отслеживать как "помеченные"
+* Напишем несложный скрипт заворачивающий строку из вышеупомянутого файла в SQL-запрос осуществляющий вставку константы типа `tsvector` в ранее созданную таблицу
+* Под контролем Natch, запустим вышеупомянутый скрипт, осуществим вставку, после чего дадим команду `CHECKPOINT`, чтобы принудить postgres сбросить все закешированные страницы хранилища на диск.
+
+### Сборка и установка
+
+
+Перед началом работы убеждаемся что системный PostgreSQL остановлен:
+
+```bash
+$ sudo service postgresql stop
+```
+
+
+#### Установка зависимостей
+
+Как и в пошлый раз установим зависимости используя зависимости сборки пакета `postgres` из debain и добавим несколько пакетов которые необходимы при сборке dev-ветки.
+
+
+```bash
+$ sudo apt-get build-dep postgresql
+$ sudo apt-get install libicu-dev bison flex libreadline-dev zlib1g-dev
+```
+
+#### Получение исходников
+
+```bash
+$ git clone  https://git.postgresql.org/git/postgresql.git -b REL_17_STABLE ~/postgres/REL_17_STABLE
+```
+
+
+#### Сборка и установка
+```bash
+cd ~/postgres/REL_17_STABLE
+$ ./configure --enable-debug --prefix=$HOME/postgres/.install/REL_17_STABLE
+$ make -j8
+$ make install
+```
+
+#### Создание управляющих скриптов
+
+Скрипты для запуска и подключения к базе данных размещаем в директории `~/postgres/.install/REL_17_STABLE-scripts`
+
+`base._sh` - скрипт определяющий глобальные переменные:
+
+```bash
+export MY_PG_BIN=$HOME/postgres/.install/REL_17_STABLE/bin
+export MY_PG_DATA=$HOME/postgres/.install/REL_17_STABLE-data
+```
+
+`initdb.sh` - скрипт для инициализации кластера БД:
+
+```bash
+#!/bin/sh
+
+source ./base._sh
+
+rm -r $MY_PG_DATA
+
+$MY_PG_BIN/initdb -D $MY_PG_DATA
+
+```
+
+`restart.sh` - скрипт для запуска/перезапуска нашего экземпляра PostgreSQL
+
+```bash
+#!/bin/bash
+
+pkill postgres
+sleep 2
+
+source ./base._sh
+
+$MY_PG_BIN/pg_ctl start -D $MY_PG_DATA -l $MY_PG_DATA/log
+```
+
+`psql.sh` - скрипт для подключения к БД через коммандно-строчный интерфейс psql
+
+```bash
+#!/bin/bash
+
+source ./base._sh
+
+$MY_PG_BIN/psql postgres
+```
+
+`psql_con.sh` - скрипт перенаправляющий поток стандартного вывода на вход нашего psql
+
+```
+#!/bin/bash
+
+source ./base._sh
+
+cat - | $MY_PG_BIN/psql postgres
+```
+
+#### Инициализация кластера БД и создание тестовой таблицы
+
+При помощи скрипта `initdb.sh` создаем кластер БД:
+
+```bash
+$ cd ~/postgres/.install/REL_17_STABLE-scripts
+$ ./initdb.sh
+```
+
+Запускаем СУБД
+
+```bash
+$ ./restart.sh
+```
+
+далее подключаемся к базе данных с помощь скрипта `psql.sh`
+
+```bash
+$ ./psql.sh
+```
+
+создаем таблицу для вставки помеченных данных
+
+```sql
+create table test (t tsvector);
+```
+
+выходим из psql
+
+```sql
+exit
+```
+
+### Подготовка помеченных данных
+
+В качестве основы для наших помеченных данных, возьмем основной [пример из документации](https://www.postgresql.org/docs/current/datatype-textsearch.html) расширив его дополнительными синтаксическими конструкциями описанными ниже по тексту документации.
+В результате получим файл вида
+
+```
+a:1A fat:2B,4C cat:5D sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12
+```
+
+#### Тестирование вставки тестовых данных
+
+Перед записью трассы следует убедиться, что мы умеем правильно вставлять в таблицу данные из файла IN.
+Вставку предполагается делать командой
+
+```
+$ cd ~/postgres/.install/REL_17_STABLE-scripts
+$ echo INSERT INTO test VALUES \( \'`cat IN`\'::tsvector\)\; CHECKPOINT | ./psql_con.sh
+
+```
+
+Как вы можете видеть в этой команде на стандартный вывод печатается SQL-запрос вставки, в который добавляется содержимое файла с помеченными данными.
+За запросом вставки следует команда `CHECKPOINT`, которая инициирует принудительный сброс на диск кэша страниц хранилища PostgreSQL.
+Полученная строка направляется в `psql`.
+Таким образом помеченными оказываются только данные из файла `IN`, но не сам текст запроса.
+
+Убедитесь, что команда отрабатывает без ошибок и данные действительно попадают в таблицу `test`
+
+#### Очистка окружения перед проведением эксперимента
+
+Перед проведением эксперимента таблицу `test` рекомендуется очистить от старых данных, чтобы они не смущали нас своим видом.
+
+```sql
+DELETE FROM test;
+```
+
+### Проведение исследования
+
+#### Создание проекта natch
+
+При создании проекта natch, уже на host-машине следуем штатной инструкции.
+В качестве источника помеченных данных указываем файл `IN` о котором мы говорили выше.
+В моем случае `/home/nataraj/postgres/.install/REL_17_STABLE-scripts/IN`.
+В качестве директории содержащий дополнительные модули с отладочной информацией указать место в которое были установлены бинарные файлы нашей сборки PostgreSQL: `/home/nataraj/postgres/.install/REL_17_STABLE/bin` и `/home/nataraj/postgres/.install/REL_17_STABLE/lib/`
+
+#### Запись трассы
+
+- Запускаем штатным образом запись трассы используя команду `natch record`;
+  - В появившемся окне виртуальной машины логинимся в виртуалку;
+  - Останавливаем системный PostgreSQL: `sudo service postgresql stop`;
+  - Переходим в каталог с нашей скриптовой обвязкой: `cd ~/postgres/.install/REL_17_STABLE-scripts`;
+  - Запускаем нашу сборку PostgreSQL: `./restart.sh`;
+- В консоли Natch делаем первый снапшот (см. штатный tutorial);
+  - Запускаем команду вставки помеченных данных в базу: `echo INSERT INTO test VALUES \( \'`cat IN`\'::tsvector\) | ./psql_con.sh`
+  - Запускаем утилиту `psql` в командно-строчном режиме: `./psql.sh`;
+    - Даем в ней команду `CHECKPOINT;` для гарантированного сброса страничного кеша на диск;
+    - Получаем содержимое таблицы `test` выполнив запрос: `SELECT * FROM test;`;
+- В консоли Natch делаем второй снапшот;
+- Завершаем работу Natch.
+
+#### Генерация отчета
+
+Далее следуя штатной инструкции при помощи команды `natch replay` снимаем трассу между первым и вторым снепшотом и загружаем ее в snatch.
+
+### Анализ результатов
+
+#### Ввод/вывод помеченных данных
+
+Помеченные данные должны через стандартный ввод попасть в `psql`, после чего попасть в бэкенд PostgreSQL через unix-сокет, через который `psql` по умолчанию подключается к базе.
+После вставки мы не перезагружали сервер, данные все еще будут закешированы, и следовательно останутся помеченными.
+Поэтому запросив данные из таблицы мы по факту должны получить значение из страничного кеша, которое все еще сохранит пометку.
+
+Посмотрим как это выглядит на практике
+
+##### Ввод `psql`
+
+![...](3. PostgreSQL.imgs/in_psql_resources.png)
+
+На картинке выше мы видим, что процесс `psql` получил помеченные данные из сокета `pipe` (это наше перенаправление вывода) и произвел какие-то операции с сокетом `unix` (видимо передал данные в backend).
+Посмотрим на содержание этих обменов.
+
+В `pipe` мы видим наш SQL запрос содержащий помеченные данные
+
+![...](3. PostgreSQL.imgs/in_psql_pipe-read.png)
+
+В `unix` сокете мы видим как тот же самый запрос с помеченными данными отправляется на запись в сокет, через который `psql` подключен к PostgreSQL 
+
+![...](3. PostgreSQL.imgs/in_psql_unix-write.png)
+
+
+#### Ввод `postgres`
+
+В процессе получения запроса вставки принимает участие и процесс `postgresql`
+
+![...](3. PostgreSQL.imgs/in_postgres_resoruces.png)
+
+На картинке выше мы видим что процесс обменивается помеченными данными через unix сокет (спойлер: он их чиатет) и кроме этого производит запись этих данных на диск (об этом ниже).
+
+Данные принимаемые процессом `postgres` полностью (что неудивительно) совпадают с данными которые отправлял процесс `psql`, с точностью до направления движения данных.
+То что `psql` писал `postgres` читает.
+
+![...](3. PostgreSQL.imgs/in_postgres_unix-read.png)
+
+#### Вывод помеченных данных
+
+Вывод в нашем случае работает похожим образом что и ввод.
+`psql` получает запрос из эмуляротра терминала, пренаправляет запрос бэкенду `postgres` через unix-сокет, получает обратно ответ и выводит его в консоль.
+
+##### Вывод `psql`
+
+![...](3. PostgreSQL.imgs/out_psql_resources.png)
+
+На этом скриншоте мы видим что помеченные данные проходят через unix-сокет и устройство виртуального терминала
+
+Ниже мы видим как происходит обмен данных через unix socket.
+Видим отправленный запрос `select` и до этого более ранний `checkpoint`.
+Видим как `psql` получает через сокет помеченные данные в ответ на отправленный запрос запрос
+
+![...](3. PostgreSQL.imgs/out_psql_unix-read.png)
+
+Далее мы видим как помеченные данные полученные от backend'а в человекочитаемом виде отправляются на консоль:
+
+![...](3. PostgreSQL.imgs/out_psql_tty1-write.png)
+
+##### Вывод `postgres`
+
+В процессе `postgres` обмен данными через unix-сокет ожидаемо происходит полностью аналогично с `pslq`, с точностью до направления:
+
+![...](3. PostgreSQL.imgs/out_postgres_resources.png)
+
+![...](3. PostgreSQL.imgs/out_postgres_unix-write.png)
+
+#### Запись на диск
+
+С точки зрения операций чтения/записи помеченные данные должны быть записаны на диск дважды.
+Первый раз в момент фиксации изменений, вносимая правка должна быть записана в т.н. Write Ahead Log (WAL), файл содержащий все последние изменения данных в базе, по которому в случае аварии данные базы могут быть восстановлены до актуального состояние.
+Второй раз, данные будут записаны в хранилище в котором они будут храниться на постоянной основе.
+Гарантированной записи в хранилище мы и добивались передавая базе данных команду `CHECKPOINT`.
+
+##### Запись в Write Ahead Log
+
+Запись WAL  происходит в процессе выполнения транзакции.
+Поэтому запись в WAL мы уже видели в том процессе `postgres` который принимал запрос на вставку помеченных данных:
+
+![...](3. PostgreSQL.imgs/in_postgres_resoruces.png)
+
+Можем теперь посмотреть на то, какие данные были в него записаны, и как в этом случае выглядят наши помеченные данные:
+
+![...](3. PostgreSQL.imgs/disk_wal.png)
+
+Мы явно видим помеченные данные, теперь уже во внутреннем представлении.
+Строковые константы перемешаны и местами визуально склеены.
+Так же мы видим, что в записанном образце WAL-лога внутреннее представление вставляемых данных повторено несколько раз, при этом помеченным оказывается один комплект.
+
+Излишне экземпляры в логе происходят из-за того, что мы были не аккуратны при проведении эксперимента, и производили вставку в не "девственную" базу в которой мы до этого создавали и удаляли аналогичные записи.
+Записи удаленные с точки зрения MVCC, с точки зрения хранилища данных продолжают существовать, требуют обслуживания и все эти действия отражены в логах операций чтения и записи.
+При этом следует обратить внимание, что помеченным остается только один экземпляр, только что вставленный, а следы оставшиеся от предыдущих вставок остаются не помеченными.
+
+
+##### Запись в основное хранилище.
+
+Финальная запись в основное хранилище происходит в отдельном процессе.
+Этот процесс так же как и другие сервисные процессы (воркеры) является форком основного процесса `postgres`, только он выполняет особую роль и называется в соответствии с этой ролью checkpointer.
+Поэтому в результатах нашего анализа запись в основное хранилище происходит в отдельном процессе так же именуемом `postgres`, но мы знаем, что он судя по всему является воркером checkpointer.
+
+![...](3. PostgreSQL.imgs/disk_checkpointer_resources.png)
+
+Здесь мы видим, что запись помеченных данных происходит в файл `/base/5/16384`, это один из файлов основного хранилища.
+Если мы загляним внутрь, то увидим следующую картину:
+
+![...](3. PostgreSQL.imgs/disk_checkpointer_file.png)
+
+Здесь мы во-первых вдимем внутреннее представление вставленного tsvector'а, данные которого отмечены как помеченные.
+Во вторых мы наблюдаем еще один экземпляр наших данных уже не помеченный.
+Этот экземпляр остался от предыдущих экспериментов и попал в записанные данные так как страница была сброшена из памяти на диск целиком.
+Можно так же обратить внимание на то, что "старый" экземпляр находится после нового.
+Это происходит от того, что в PostgreSQL записи добавляются на страницу с конца, это штатное, ожидаемое поведение.
+
+#### Стек вызовов
+
+Далее рассмотрим как помеченные данные передаются внутри процессов.
+Процесс `psql` мы из рассмотрения исключим, с формулировкой "это тема для отдельного исследования".
+Если посмотреть на историю стека вызовов, то становиться видно, что с помеченными данными происходит много манипуляций вроде копирования и какой-то валидации.
+Однако как-то содержательно прокомментировать происходящее я не в состоянии, поэтому оставим эту часть реальности за скобками.
+Поэтому сосредоточимся на том, что происходит с помеченными данными в процессе `postgresql` при добавлении новой записи, и при выводе содержимого таблицы с помеченными данными на экран.
+
+##### Стек вызовов процесса `postgres`, ввод
+
+История стека вызовов `postgres` при вставке помеченных данных в таблицу делится на три принципиальные части.
+
+В первой части происходит общий "парсинг" запроса вставки:
+
+![...](3. PostgreSQL.imgs/callstack_in_1.png)
+
+На этом скриншоте мы видим как помеченные данные попадают в backed вместе с запросом, проходят предварительную проверку и после чего производится синтаксический разбор самих помеченных данных.
+Сами помеченные данные при этом никак отдельно не обрабатываются, только туда-сюда копируются и принимают участие в других групповых операциях.
+
+За синтаксическим разбором следует разбор константных аргументов входящих в состав запроса.
+Это как раз то место в котором наши помеченные данные будут парситься.
+
+![...](3. PostgreSQL.imgs/callstack_in_2.png)
+
+И действительно, в глубине стека вызовов мы наблюдаем функцию `tsvectorin`, которая занимается переводом констант типа `tsvector` из внешнего, текстового, представления в представление в котором она будет обрабатываться внутри СУБД.
+Внутри этой функции происходит какая-то достаточно развесистая обработка, тип данных-то сложный.
+
+Далее идет блок вызовов посвященный выполнению запроса:
+
+![...](3. PostgreSQL.imgs/callstack_in_3.png)
+
+В первой подветке идет формирование записи (`heap_fill_tuple`).
+Помеченные данные судя по стеку вызовов копируются куда-то в формируемую запись.
+
+Во второй подветке производится вставка сформированной записи в таблицу (`heapam_tuple_insert`).
+Тут тоже помеченные данные просто копируются из одного места в другое
+
+И в третьей, последней подветке происходит запись произведенных изменений в WAL-лог (`XLogInsert`).
+Помеченные данные принимают участие в вычислении контрольной суммы, и копируются вместе со всей остальной дельтой произошедшей во время транзакции.
+
+### Итог
+
+Не смотря на то, что эксперимент был проведен не очень чисто, и наши данные оказались замусорены артефактами от предыдущих запусков, нам удалось отследить маршрут движения помеченных данных данных, и наблюдаемая картина совпала с нашими теоретическими представлениями.
+
+В качестве развития темы читателю предлагается во-первых повторить предложенный эксперимент полностью пересоздав кластер базы данных перед проведением эксперимента, и убедиться что мы в этом случае артефакты предыдущих вставок в отчете natch не наблюдаются.
+
+Так же читателю предлагается повторить эксперимент с перезагрузкой базы данных между вставкой помеченных данных и их получением.
+Предположительно, при прохождении через дисковое хранилище данные должны утратить пометку.
+Однако в случае, если они останутся в дисковом кеше уровня ОС, пометка может и сохраниться.
+Интересно будет выяснить каково будет фактическое поведение, и как поставить эксперимент, чтобы дисковый кеш тоже оказался бы гарантированно сброшен. 
+
+
+**FIXME**
+sudo su
+echo "deb-src http://deb.debian.org/debian trixie main" >>/etc/apt/sources.list
+apt-get update
+