Size: a a a

pgsql – PostgreSQL

2021 February 13

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
Грубо говоря каждый раз перед созданием data проверять, есть ли такое уже в таблице, и если есть, отсылать на эту строку?
Можно не проверять даже, достаточно внешний ключ повесить - PostgreSQL сам проверит
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Dmitriy
Можно не проверять даже, достаточно внешний ключ повесить - PostgreSQL сам проверит
это который foreign key?
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
он может быть композитным же?
источник

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
это который foreign key?
Да. Но, судя по тому, что вы выше написали "Первоначально заложить и такую возможность" - вам нужно всё же m2m
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Dmitriy
Да. Но, судя по тому, что вы выше написали "Первоначально заложить и такую возможность" - вам нужно всё же m2m
т.е через отдельную реляционную таблицу?
источник

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
т.е через отдельную реляционную таблицу?
Да, но даже так внешние ключи, естественно, нужны
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Хорошо. В этой связывающей таблице должен быть какой-то primary key
Но этот ключ должен быть также уникальным
Как это понимать, если есть вероятность как повторения data_id, так и user_id
источник

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
Хорошо. В этой связывающей таблице должен быть какой-то primary key
Но этот ключ должен быть также уникальным
Как это понимать, если есть вероятность как повторения data_id, так и user_id
Там первичный ключ - связка из двух полей
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Viktor Grigorev
в приведенном запросе видно, что строк мало, они расположены упрядоченно скорее всего и чтение первых 10 строк затрагивает не больше блоков, чем чтение первых 100 строк
В приведённых запросах:
. "WHERE id < 100" — это один проход от корня индекса до страницы (все эти записи на одной):  metapage; root → leaf.
. "WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9 ,10)" — десять таких проходов (да, от корня), каждое "касание" страницы, кроме metapage (потому что она действительно просматривается один раз), считается.

(поправил)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Viktor Grigorev
в приведенном запросе видно, что строк мало, они расположены упрядоченно скорее всего и чтение первых 10 строк затрагивает не больше блоков, чем чтение первых 100 строк
тут надо “видеть” как база выполняет проверку предиката (в EXPLAIN не видно), я не знаю и в код сейчас не полезу

предположу, что в первом случае, т.к. даётся массив из 10 значений, мы получаем 10 IndexAccess-es и каждый учитывается отдельно (такой внутренний NestedLoop)
во втором же случае у нас идёт один RangeScan, который обращается к: MetaPage индекса, одной странице индекса и одной странице таблицы.
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Dmitriy
Там первичный ключ - связка из двух полей
Так
Есть некий юзер
У него есть ид
Хочу достать всю его дату
Чтобы обратиться к связывающей таблице, как вы говорите, нужно знать оба айди (user и data)
Как мне узнать этот data.id?)
источник

AG

A G in pgsql – PostgreSQL
Viktor Grigorev
в теории апач может запускать какой-то другой скрипт (где-нибудь копия старая лежит), а ты правишь этот. про разные php.ini уже писали
нашел в логах php следующее:
pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Permission denied
       Is the server running on host &quot;192.168.253.130&quot; and accepting
У кого, получается, доступа нет?
источник

D

Denisio in pgsql – PostgreSQL
Mikhail Smolnikov
Так
Есть некий юзер
У него есть ид
Хочу достать всю его дату
Чтобы обратиться к связывающей таблице, как вы говорите, нужно знать оба айди (user и data)
Как мне узнать этот data.id?)
select data.*
from data
join data_users on data_users.data_id and data_users.users_id=твойюзер
_id
источник

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
Так
Есть некий юзер
У него есть ид
Хочу достать всю его дату
Чтобы обратиться к связывающей таблице, как вы говорите, нужно знать оба айди (user и data)
Как мне узнать этот data.id?)
SELECT d.id, d.name FROM data d JOIN data_users du ON du.data_id=d.id AND du.user_id=2345
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Denisio
select data.*
from data
join data_users on data_users.data_id and data_users.users_id=твойюзер
_id
Итого
Создаю связывающую таблицу
В ней два поля: user_id, data_id
Накидываю на каждую референцию на  id в каждой таблице
Что делать с primary key то
Или без него вообще?
источник

D

Dmitriy in pgsql – PostgreSQL
Mikhail Smolnikov
Итого
Создаю связывающую таблицу
В ней два поля: user_id, data_id
Накидываю на каждую референцию на  id в каждой таблице
Что делать с primary key то
Или без него вообще?
Как без него? Связка user_id, data_id - это первичный ключ из двух полей сразу
источник

D

Denisio in pgsql – PostgreSQL
я про композитный primary key же написал выше
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Dmitriy
Как без него? Связка user_id, data_id - это первичный ключ из двух полей сразу
Хорошоо
Просто primary key (user_id, data_id)?
Ясненько
источник

D

Denisio in pgsql – PostgreSQL
да
источник

MS

Mikhail Smolnikov in pgsql – PostgreSQL
Спасибо огромное))
@dbalashov @dimuska139
источник