Size: a a a

pgsql – PostgreSQL

2021 January 19

W

Warstone in pgsql – PostgreSQL
Массивы в Пг начинаются с 1.
источник

K

Kirill in pgsql – PostgreSQL
понял, благодарю
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kirill
Большое спасибо! Подскажите как вот это работает source[1]?
По-моему, https://t.me/pgsql/277115 нужно ещё немного допилить, потому что:
SELECT foo.n, source[1] || ' ' || regexp_replace(source[2], '\S', '*', 'g') || ' ' || source[3]
 FROM (
      VALUES ('Раз двА ТРи 4 пять'),
             ('Раз'),
             ('Раз двА'),
             ('Раз двА '),
             (' Раз   двА ТРи 4   пять '),
             ('Раз    двА    ТРи'),
             ('1  2')
      ) AS foo(n)
 LEFT JOIN LATERAL regexp_match(foo.n, '(\S*)\s+(.*?)\s+(\S*)') AS r(source)
   ON true;

Кстати, greediness в движке regex PostgreSQL работает непривычно, т.е. стоит и этот .*? проверить (наверное, можно просто ^RE$, как выше показывали).
источник

K

Kirill in pgsql – PostgreSQL
Yaroslav Schekin
По-моему, https://t.me/pgsql/277115 нужно ещё немного допилить, потому что:
SELECT foo.n, source[1] || ' ' || regexp_replace(source[2], '\S', '*', 'g') || ' ' || source[3]
 FROM (
      VALUES ('Раз двА ТРи 4 пять'),
             ('Раз'),
             ('Раз двА'),
             ('Раз двА '),
             (' Раз   двА ТРи 4   пять '),
             ('Раз    двА    ТРи'),
             ('1  2')
      ) AS foo(n)
 LEFT JOIN LATERAL regexp_match(foo.n, '(\S*)\s+(.*?)\s+(\S*)') AS r(source)
   ON true;

Кстати, greediness в движке regex PostgreSQL работает непривычно, т.е. стоит и этот .*? проверить (наверное, можно просто ^RE$, как выше показывали).
Супер) Спасибо. Я вот не понимаю как с помощью регулярки разделили данные на 3 группы
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kirill
Супер) Спасибо. Я вот не понимаю как с помощью регулярки разделили данные на 3 группы
А что "супер"? ;) Вы проблемы-то эти исправили, всё получилось?

> как с помощью регулярки разделили данные на 3 группы

С помощью captures ("capturing" parentheses).
В (\S*)\s+(.*?)\s+(\S*) три пары скобок, каждая захватывает свой кусок строки, всё это возвращается в виде массива, ну и так далее.
источник

K

Kirill in pgsql – PostgreSQL
Yaroslav Schekin
А что "супер"? ;) Вы проблемы-то эти исправили, всё получилось?

> как с помощью регулярки разделили данные на 3 группы

С помощью captures ("capturing" parentheses).
В (\S*)\s+(.*?)\s+(\S*) три пары скобок, каждая захватывает свой кусок строки, всё это возвращается в виде массива, ну и так далее.
а еще не знаю вроде почти разобрался в предложенных решениях. Про регулярки узнал за вечер больше, чем за всю жизнь 😊
источник

K

Kirill in pgsql – PostgreSQL
Yaroslav пытаюсь переписать ваш запрос, чтобы без джойна он был

SELECT    *,
      regexp_replace(n, '(\S*)\s+(.*?)\s+(\S*)', '\1' || ' ' || regexp_replace('\2', '\S', '*', 'g') || ' ' || '\3') AS q
FROM (
      VALUES ('Раз двА ТРи 4 пять'),
             ('Раз'),
             ('Раз двА'),
             ('Раз двА '),
             (' Раз   двА ТРи 4   пять '),
             ('Раз    двА    ТРи'),
             ('1  2'),
             ('    ')
      ) AS foo(n)

и вторая группа возвращает всегда ** что неправильно, подскажите почему так происходит?
источник

K

Kirill in pgsql – PostgreSQL
насколько  я понял внутренний regexp_replace не видит группы внешнего?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kirill
Yaroslav пытаюсь переписать ваш запрос, чтобы без джойна он был

SELECT    *,
      regexp_replace(n, '(\S*)\s+(.*?)\s+(\S*)', '\1' || ' ' || regexp_replace('\2', '\S', '*', 'g') || ' ' || '\3') AS q
FROM (
      VALUES ('Раз двА ТРи 4 пять'),
             ('Раз'),
             ('Раз двА'),
             ('Раз двА '),
             (' Раз   двА ТРи 4   пять '),
             ('Раз    двА    ТРи'),
             ('1  2'),
             ('    ')
      ) AS foo(n)

и вторая группа возвращает всегда ** что неправильно, подскажите почему так происходит?
Это не мой запрос, спрашивайте автора. ;)
источник

K

Kirill in pgsql – PostgreSQL
@Warstone ? 😊
источник

W

Warstone in pgsql – PostgreSQL
И не мой
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
a m
> query1 EXCEPT [ALL] query2
Вроде правильно все.
Не отработало: выдало записи, которые есть и в 1 и во второй
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Всё ещё актуально: Мне нужно сравнить 2 таблицы, по 1 полю, и вывести только те, которых нету в одной из них, желательно с указанием в какой базе есть запись
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
🌌El.Randir/42ᅠ [AD]
Всё ещё актуально: Мне нужно сравнить 2 таблицы, по 1 полю, и вывести только те, которых нету в одной из них, желательно с указанием в какой базе есть запись
Сделал, не актуально.
источник

YU

Yuliya Uldanova in pgsql – PostgreSQL
Здравствуйте, еще один вопрос, правильно ли я реализовала(просто не много щапуиалась в связях) .
Задание: В этом учебном заведении присутствуют кафедры, работники этого уч заведения, факультеты и проекты над которыми трудятся работники. Как в варианте языка определения данных, можно сформулировать требования, что сотрудники могут работать над какими-либо проектами, при этом над каким-либо проектом обязательно должен трудиться хотя бы один сотрудник?
CREATE TABLE staff (
staff_id INT,
name VARCHAR(45),
PRIMARY KEY (staff_id);
);

CREATE TABLE project (
caf_id INT,
name VARCHAR(45),
PRIMARY KEY (caf_id),

);

CREATE TABLE staff_project(
staff_id INT,
project_id INT,
PRIMARY KEY(staff_id, project_id),
FOREIGN KEY (staff_id) REFERENCES staff(staff_id),
FOREIGN KEY (project_id) REFERENCES project(project_id)
);
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Yuliya Uldanova
Здравствуйте, еще один вопрос, правильно ли я реализовала(просто не много щапуиалась в связях) .
Задание: В этом учебном заведении присутствуют кафедры, работники этого уч заведения, факультеты и проекты над которыми трудятся работники. Как в варианте языка определения данных, можно сформулировать требования, что сотрудники могут работать над какими-либо проектами, при этом над каким-либо проектом обязательно должен трудиться хотя бы один сотрудник?
CREATE TABLE staff (
staff_id INT,
name VARCHAR(45),
PRIMARY KEY (staff_id);
);

CREATE TABLE project (
caf_id INT,
name VARCHAR(45),
PRIMARY KEY (caf_id),

);

CREATE TABLE staff_project(
staff_id INT,
project_id INT,
PRIMARY KEY(staff_id, project_id),
FOREIGN KEY (staff_id) REFERENCES staff(staff_id),
FOREIGN KEY (project_id) REFERENCES project(project_id)
);
Хмм... ну а где тут эта гарантия "над каким-либо проектом обязательно должен трудиться хотя бы один сотрудник"?
Нет или пропустил?
источник

YU

Yuliya Uldanova in pgsql – PostgreSQL
Yaroslav Schekin
Хмм... ну а где тут эта гарантия "над каким-либо проектом обязательно должен трудиться хотя бы один сотрудник"?
Нет или пропустил?
Я вот и не знаю как это правильно реализовать(
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Yuliya Uldanova
Я вот и не знаю как это правильно реализовать(
Это зависит от других ограничений. Над сколькими проектами может работать один сотрудник, например?
Да и вообще, можно попробовать выполнить формальную нормализацию, и посмотреть, что получится, "чтоб не думать". ;)
источник
2021 January 20

V

Viktor in pgsql – PostgreSQL
источник

V

Viktor in pgsql – PostgreSQL
Всем привет, не получается запустить сервер. Не могли бы Вы помочь?
источник