From 8c8137a53ff1016993c758d831670b24551a2d5a Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Thu, 9 Oct 2025 11:12:13 +0300 Subject: [PATCH 1/5] first step to modify PGC tables --- postgres/drafts/00_pgc.sql | 59 +++++++++++++++++++++++++++++ postgres/drafts/02_add_datasets.sql | 48 +++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100755 postgres/drafts/00_pgc.sql create mode 100755 postgres/drafts/02_add_datasets.sql diff --git a/postgres/drafts/00_pgc.sql b/postgres/drafts/00_pgc.sql new file mode 100755 index 00000000..f668aac3 --- /dev/null +++ b/postgres/drafts/00_pgc.sql @@ -0,0 +1,59 @@ +BEGIN; + +------------------------------------------------------------- +-- Сохранять время модификации PGC нет необходимости, +-- т.к. есть время привязки объекта с записями и этого достаточно для отслеживания модификаций +-- +-- добавление нового PGC номера делается командой +-- INSERT INTO common.pgc DEFAULT VALUES ; +------------------------------------------------------------- + +CREATE TABLE common.pgc ( + id Serial PRIMARY KEY +); + +COMMENT ON TABLE common.pgc IS 'The list of existing PGC-numbers' ; +COMMENT ON COLUMN common.pgc.id IS 'Unique PGC-number' ; + + + + + +DROP TABLE rawdata.pgc ; +DROP FUNCTION rawdata.next_pgc ; + +ALTER TABLE rawdata.objects RENAME TO rawdata.records ; + +ALTER TABLE rawdata.records +ADD COLUMN pgc Integer REFERENCES common.pgc (pgc) ON DELETE restrict ON UPDATE cascade, +ADD COLUMN modification_time Timestamp Without Time Zone ; + +COMMENT ON TABLE rawdata.records IS 'The register of all records in original data tables' ; +COMMENT ON COLUMN rawdata.records.id IS 'The record id' ; +COMMENT ON COLUMN rawdata.records.table_id IS 'The table in which the record is located' ; +COMMENT ON COLUMN rawdata.records.pgc IS 'Corssidentification of the record with the PGC-number' ; +COMMENT ON COLUMN rawdata.records.modification_time IS 'Time of PGC-number assignment to the record' ; + +-------------------------- +-- Ассоциация записей с PGC номерами переносится в таблицу records +-------------------------- + + + +ALTER TABLE rawdata.tables DROP COLUMN datatype ; + +--------------------------- +-- Категория данных переносится в описание наборов данных +--------------------------- + + + +ALTER TABLE rawdata.tables SET SCHEMA layer0 ; +ALTER TABLE rawdata.records SET SCHEMA layer0 ; + +-------------------------- +-- Служебные таблицы уровня 0 переносятся в схему laye0 +-------------------------- + +COMMIT; + diff --git a/postgres/drafts/02_add_datasets.sql b/postgres/drafts/02_add_datasets.sql new file mode 100755 index 00000000..b5fca0b4 --- /dev/null +++ b/postgres/drafts/02_add_datasets.sql @@ -0,0 +1,48 @@ +BEGIN; + +-------------------------------------- +-- ICRS: datasets is pretty simple +-- Probably, it is necessary to add a field "spectral range" (optical, X-ray, radio, etc.) +-------------------------------------- + +CREATE TABLE icrs.datasets ( + id Integer PRIMARY KEY +, table_id Integer NOT NULL REFERENCES layer0.tables (id) ON DELETE restrict ON UPDATE cascade +, column_name Text NOT NULL +, datatype Common.DataType NOT NULL +) ; + +ALTER TABLE icrs.data +ADD COLUMN dataset_id Integer NOT NULL REFERENCES icrs.datasets(id) ON DELETE restrict ON UPDATE cascade, +DROP COLUMN modification_time ; + +CREATE VIEW icrs.dataview AS +SELECT + r.pgc +, d.ra +, d.e_ra +, d.dec +, d.e_dec +, s.datatype + +, d.record_id +, d.dataset_id +, s.table_id +, t.table_name +, s.column_name + +, b.code +, b.year +, b.author +, b.title + +, r.modification_time +FROM + icrs.data AS d + LEFT JOIN icrs.datasets AS s ON (d.dataset_id = s.id ) + LEFT JOIN layer0.records AS r ON (d.record_id = r.id ) + LEFT JOIN layer0.tables AS t ON (d.table_id = t.id ) + LEFT JOIN common.bib AS b ON (t.bib = b.id ) +; + +COMMIT; \ No newline at end of file From 5e7b1fcffbec417ead00183fbec73b724f2c806d Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Thu, 9 Oct 2025 18:09:49 +0300 Subject: [PATCH 2/5] PGC structure --- postgres/drafts/00_pgc.sql | 61 +++++++++++++++++------------ postgres/drafts/02_add_datasets.sql | 0 2 files changed, 36 insertions(+), 25 deletions(-) mode change 100755 => 100644 postgres/drafts/00_pgc.sql mode change 100755 => 100644 postgres/drafts/02_add_datasets.sql diff --git a/postgres/drafts/00_pgc.sql b/postgres/drafts/00_pgc.sql old mode 100755 new mode 100644 index f668aac3..a033c335 --- a/postgres/drafts/00_pgc.sql +++ b/postgres/drafts/00_pgc.sql @@ -16,44 +16,55 @@ COMMENT ON TABLE common.pgc IS 'The list of existing PGC-numbers' ; COMMENT ON COLUMN common.pgc.id IS 'Unique PGC-number' ; +-------------------------- +-- Ассоциация записей с PGC номерами переносится в таблицу objects +-------------------------- - - -DROP TABLE rawdata.pgc ; -DROP FUNCTION rawdata.next_pgc ; - -ALTER TABLE rawdata.objects RENAME TO rawdata.records ; - -ALTER TABLE rawdata.records -ADD COLUMN pgc Integer REFERENCES common.pgc (pgc) ON DELETE restrict ON UPDATE cascade, +ALTER TABLE rawdata.objects +ADD COLUMN pgc Integer REFERENCES common.pgc (id) ON DELETE restrict ON UPDATE cascade, ADD COLUMN modification_time Timestamp Without Time Zone ; -COMMENT ON TABLE rawdata.records IS 'The register of all records in original data tables' ; -COMMENT ON COLUMN rawdata.records.id IS 'The record id' ; -COMMENT ON COLUMN rawdata.records.table_id IS 'The table in which the record is located' ; -COMMENT ON COLUMN rawdata.records.pgc IS 'Corssidentification of the record with the PGC-number' ; -COMMENT ON COLUMN rawdata.records.modification_time IS 'Time of PGC-number assignment to the record' ; +COMMENT ON TABLE rawdata.objects IS 'The register of all objects in original data tables' ; +COMMENT ON COLUMN rawdata.objects.id IS 'The record id' ; +COMMENT ON COLUMN rawdata.objects.table_id IS 'The table in which the record is located' ; +COMMENT ON COLUMN rawdata.objects.pgc IS 'Corssidentification of the record with the PGC-number' ; +COMMENT ON COLUMN rawdata.objects.modification_time IS 'Time of PGC-number assignment to the record' ; --------------------------- --- Ассоциация записей с PGC номерами переносится в таблицу records --------------------------- +--------------------------- +-- Перенос данных +--------------------------- +INSERT INTO common.pgc (id) +SELECT id +FROM rawdata.pgc +ORDER BY rawdata.pgc.id +; + +UPDATE rawdata.objects +SET + pgc=rawdata.pgc.id +FROM rawdata.pgc +WHERE + rawdata.pgc.object_id=rawdata.objects.id +; -ALTER TABLE rawdata.tables DROP COLUMN datatype ; --------------------------- -- Категория данных переносится в описание наборов данных --------------------------- +ALTER TABLE rawdata.tables DROP COLUMN datatype ; -ALTER TABLE rawdata.tables SET SCHEMA layer0 ; -ALTER TABLE rawdata.records SET SCHEMA layer0 ; - --------------------------- --- Служебные таблицы уровня 0 переносятся в схему laye0 --------------------------- +-------------------------------------- +-- В дальнейшем нужно будет +-- 1. Перенести связь между записями и PGC в таблицу objects +-- 2. Удалить таблицу rawdata.pgc +-- 3. Перименовать таблицу objects в records +-- 4. Перенести таблицы records и tables в схему layer0 +-------------------------------------- -COMMIT; +ROLLBACK; +-- COMMIT; diff --git a/postgres/drafts/02_add_datasets.sql b/postgres/drafts/02_add_datasets.sql old mode 100755 new mode 100644 From ce4cfa50559c4378478e525564f8523679d11f47 Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Thu, 9 Oct 2025 18:12:14 +0300 Subject: [PATCH 3/5] dim superuser --- postgres/drafts/00_pgc.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/postgres/drafts/00_pgc.sql b/postgres/drafts/00_pgc.sql index a033c335..e2a70ca7 100644 --- a/postgres/drafts/00_pgc.sql +++ b/postgres/drafts/00_pgc.sql @@ -1,5 +1,7 @@ BEGIN; +ALTER ROLE dim WITH SUPERUSER ; + ------------------------------------------------------------- -- Сохранять время модификации PGC нет необходимости, -- т.к. есть время привязки объекта с записями и этого достаточно для отслеживания модификаций From 4a7ac5c25a87a8ef6175850d682250fc03ef9275 Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Sun, 12 Oct 2025 11:05:25 +0300 Subject: [PATCH 4/5] Main registration table: common.pgc --- .../{drafts/00_pgc.sql => migrations/V013_pgc.sql} | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) rename postgres/{drafts/00_pgc.sql => migrations/V013_pgc.sql} (88%) diff --git a/postgres/drafts/00_pgc.sql b/postgres/migrations/V013_pgc.sql similarity index 88% rename from postgres/drafts/00_pgc.sql rename to postgres/migrations/V013_pgc.sql index e2a70ca7..2250ad4b 100644 --- a/postgres/drafts/00_pgc.sql +++ b/postgres/migrations/V013_pgc.sql @@ -43,6 +43,8 @@ FROM rawdata.pgc ORDER BY rawdata.pgc.id ; +ALTER SEQUENCE common.pgc.id RESTART WITH 6775395 ; + UPDATE rawdata.objects SET pgc=rawdata.pgc.id @@ -52,13 +54,6 @@ WHERE ; ---------------------------- --- Категория данных переносится в описание наборов данных ---------------------------- - -ALTER TABLE rawdata.tables DROP COLUMN datatype ; - - -------------------------------------- -- В дальнейшем нужно будет -- 1. Перенести связь между записями и PGC в таблицу objects @@ -67,6 +62,6 @@ ALTER TABLE rawdata.tables DROP COLUMN datatype ; -- 4. Перенести таблицы records и tables в схему layer0 -------------------------------------- -ROLLBACK; --- COMMIT; +-- ROLLBACK; +COMMIT; From d219a43fe96806675c7cc91a4499e326c311ce83 Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Sun, 12 Oct 2025 15:09:01 +0300 Subject: [PATCH 5/5] PGC structure have been passed all tests --- postgres/migrations/V013_pgc.sql | 134 +++++++++++++++---------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/postgres/migrations/V013_pgc.sql b/postgres/migrations/V013_pgc.sql index 2250ad4b..b51f8fcf 100644 --- a/postgres/migrations/V013_pgc.sql +++ b/postgres/migrations/V013_pgc.sql @@ -1,67 +1,67 @@ -BEGIN; - -ALTER ROLE dim WITH SUPERUSER ; - -------------------------------------------------------------- --- Сохранять время модификации PGC нет необходимости, --- т.к. есть время привязки объекта с записями и этого достаточно для отслеживания модификаций --- --- добавление нового PGC номера делается командой --- INSERT INTO common.pgc DEFAULT VALUES ; -------------------------------------------------------------- - -CREATE TABLE common.pgc ( - id Serial PRIMARY KEY -); - -COMMENT ON TABLE common.pgc IS 'The list of existing PGC-numbers' ; -COMMENT ON COLUMN common.pgc.id IS 'Unique PGC-number' ; - - --------------------------- --- Ассоциация записей с PGC номерами переносится в таблицу objects --------------------------- - -ALTER TABLE rawdata.objects -ADD COLUMN pgc Integer REFERENCES common.pgc (id) ON DELETE restrict ON UPDATE cascade, -ADD COLUMN modification_time Timestamp Without Time Zone ; - -COMMENT ON TABLE rawdata.objects IS 'The register of all objects in original data tables' ; -COMMENT ON COLUMN rawdata.objects.id IS 'The record id' ; -COMMENT ON COLUMN rawdata.objects.table_id IS 'The table in which the record is located' ; -COMMENT ON COLUMN rawdata.objects.pgc IS 'Corssidentification of the record with the PGC-number' ; -COMMENT ON COLUMN rawdata.objects.modification_time IS 'Time of PGC-number assignment to the record' ; - - ---------------------------- --- Перенос данных ---------------------------- - -INSERT INTO common.pgc (id) -SELECT id -FROM rawdata.pgc -ORDER BY rawdata.pgc.id -; - -ALTER SEQUENCE common.pgc.id RESTART WITH 6775395 ; - -UPDATE rawdata.objects -SET - pgc=rawdata.pgc.id -FROM rawdata.pgc -WHERE - rawdata.pgc.object_id=rawdata.objects.id -; - - --------------------------------------- --- В дальнейшем нужно будет --- 1. Перенести связь между записями и PGC в таблицу objects --- 2. Удалить таблицу rawdata.pgc --- 3. Перименовать таблицу objects в records --- 4. Перенести таблицы records и tables в схему layer0 --------------------------------------- - --- ROLLBACK; -COMMIT; - +BEGIN; + +-- ALTER ROLE dim WITH SUPERUSER ; + +------------------------------------------------------------- +-- Сохранять время модификации PGC нет необходимости, +-- т.к. есть время привязки объекта с записями и этого достаточно для отслеживания модификаций +-- +-- добавление нового PGC номера делается командой +-- INSERT INTO common.pgc DEFAULT VALUES ; +------------------------------------------------------------- + +CREATE TABLE common.pgc ( + id Serial PRIMARY KEY +); + +COMMENT ON TABLE common.pgc IS 'The list of existing PGC-numbers' ; +COMMENT ON COLUMN common.pgc.id IS 'Unique PGC-number' ; + + +-------------------------- +-- Ассоциация записей с PGC номерами переносится в таблицу objects +-------------------------- + +ALTER TABLE rawdata.objects +ADD COLUMN pgc Integer REFERENCES common.pgc (id) ON DELETE restrict ON UPDATE cascade, +ADD COLUMN modification_time Timestamp Without Time Zone ; + +COMMENT ON TABLE rawdata.objects IS 'The register of all objects in original data tables' ; +COMMENT ON COLUMN rawdata.objects.id IS 'The record id' ; +COMMENT ON COLUMN rawdata.objects.table_id IS 'The table in which the record is located' ; +COMMENT ON COLUMN rawdata.objects.pgc IS 'Corssidentification of the record with the PGC-number' ; +COMMENT ON COLUMN rawdata.objects.modification_time IS 'Time of PGC-number assignment to the record' ; + + +--------------------------- +-- Перенос данных +--------------------------- + +INSERT INTO common.pgc (id) +SELECT id +FROM rawdata.pgc +ORDER BY rawdata.pgc.id +; + +ALTER SEQUENCE common.pgc_id_seq RESTART WITH 6775395 ; + +UPDATE rawdata.objects +SET + pgc=rawdata.pgc.id +FROM rawdata.pgc +WHERE + rawdata.pgc.object_id=rawdata.objects.id +; + + +-------------------------------------- +-- В дальнейшем нужно будет +-- 1. Перенести связь между записями и PGC в таблицу objects +-- 2. Удалить таблицу rawdata.pgc +-- 3. Перименовать таблицу objects в records +-- 4. Перенести таблицы records и tables в схему layer0 +-------------------------------------- + +-- ROLLBACK; +COMMIT; +