Как стать автором
Обновить
13
0.2
Игорь @2medic

Пользователь

Отправить сообщение

Как-то автор перескочил через TUI. UI не обязательно может быть графическим. Он вполне может быть себе текстовым. Тот же небезызвестный Norton Commander тому пример. А уж сколько софта было написано на текстовом фреймворке TurboVision…

Они не только не умеют считать буквы, они действительно не знают, из каких букв состоит слово. Попросил LLM объяснить, как запомнить ключ -n для указания схемы утилите pg_dump.

Ответ удивил

Слишком много легаси и всевозможных древних зависимостей тащат за собой.

Как я могу отозвать то, что не ставил?

Прошу искренне извинить. Из контекста на Вас подумалось.

Потому что это первое на что смотришь в плане запроса

Так я ведь с этим и не спорю. Все знают, что seq scan на больших объёмах данных это нехорошо.

Ну это лично Ваше восприятие

Ну да. Это моё восприятие. Мне показалось, что автор имеет ввиду, что для поиска соподчинённых данных нужно всего лишь добавить ключевые поля. Даже своё восприятие аргументировал. А тут мне минусы лепят и рассказывают очевидные вещи о пользе индексирования. Я уж весь мозг изломал, что же я такого крамольного написал.

Хотя бы сами попробовали

О, и верно. Был не прав.

Нет, так как фраза "к получению всех владельцев домашнего питомца" уже подразумевает, что у домашнего питомца могло быть несколько владельцев.

Абсолютно согласен. Просто было лениво рисовать pivot таблицу. Но рад, что Вы наконец-то внимательно прочитали текст сообщения и даже потратили время на аргументацию. Жаль, что минус не отозвали.

Индексы позволяют избежать сканирования таблиц.

Каким образом это утверждение соотносится с утверждением автора:

При работе с реляционной базой данных можно перейти от получения всех домашних питомцев человека к получению всех владельцев домашнего питомца, добавив в таблицы один-два индекса.

Никакие внешние ключи сюда не прикрутите, хотя консистентность можно контролировать триггерами.

Да ладно?

CREATE TABLE owners_to_pets (
  Id     integer   NOT NULL,
  Valid  daterange NOT NULL,
  own_id int       NOT NULL,
  pet_id int       NOT NULL,
  CONSTRAINT owners_to_pets_PK_idx
    EXCLUDE USING GIST (pet_id WITH =, Valid WITH &&),
  -- в конкретный период у питомца может быть только один владелец
  
  -- Внешние ключи
  CONSTRAINT fk_owners
    FOREIGN KEY (own_id)
    REFERENCES owners(Id)
    ON DELETE CASCADE,
  
  CONSTRAINT fk_pets
    FOREIGN KEY (pet_id)
    REFERENCES pets(Id)
    ON DELETE CASCADE
);

Держите внешние ключи. Но будет и без них работать, как я и написал выше. Просто просторечно поля вида own_id и pet_id называют внешними ключами, хотя внешние ключи могут быть и не построены.

Выборка всех владельцев питомца возможна по индексу owners_to_pets_PK_idx без сканирования таблицы owners_to_pets. А вот для того, чтобы наоборот, найти всех питомцов владельца на конкретный момент времени без сканирования таблицы, потребуется еще один индекс …

Я откровенно не понимаю, почему Вы прицепились к сканированию таблицы?

Поясняю, даже без единого индекса, СУБД найдёт искомые записи, уж как оно будет это делать, эффективно или нет, неважно. НАЙДЁТ!

А вот если выкинуть поля own_id и pet_id — НЕ НАЙДЁТ!

В оригинале не идёт речь о том, что можно получить всех владельцев домашнего питомца без использования seq scan. А о том, что их можно получить, добавив...

Вот на мой взгляд, добавив ключевые поля. А никак не индексы.

Внешние ключи никак не влияют на производительность выборки данных

Я где-то утверждал обратное?

Смотрите внимательно: есть таблица, содержащая виды (типы) домашних питомцев. Всё верно? В оригинале:

можно перейти от получения всех домашних питомцев человека

Есть таблица владельцев домашних животных. В оригинале:

перейти ... к получению всех владельцев домашнего питомца

Таблица: Владельцы              Таблица: Домашние Животные
+----+------------+             +----+------------+------------+
| ID |   Имя      |             | ID |  Вид       | Владелец_ID|
+----+------------+             +----+------------+------------+
| 1  | Иван       |             | 1  | Кошка      |     1      |
| 2  | Анна       |             | 2  | Собака     |     1      |
| 3  | Ольга      |             | 3  | Хомяк      |     2      |
| 4  | Павел      |             | 4  | Попугай    |     3      |
+----+------------+             +----+------------+------------+

Получить владельцев домашних питомцев можно создав реляцию между этими двумя таблицами. И индексы здесь не при чём.

Нам нужно ключевое поле, на которое можно ссылаться и индекс по нему может быть вообще не построен. И внешний ключ. Строго говоря, внешний ключ тоже не обязателен. Но для целей самодокументирования и обеспечения ссылочной целостности — крайне желателен.

Вот и получается, что Вы не поняли о чём идёт речь, но минус влепили.

При работе с реляционной базой данных можно перейти от получения всех домашних питомцев человека к получению всех владельцев домашнего питомца, добавив в таблицы один-два индекса.

Скорее не индекса, а внешних ключа.

Потому, что существуют виртуальные хостинги. Это когда всё настроено хостинг-провайдером, а пользователь только файлики в папочки по sftp заливает. Запустить что-то на таком "сервере" не получится, а вот загрузить сертификаты через web-приложение провайдера можно. Как я понял, у ТС именно такая ситуация.

50% всех несчастных случаев начинается со слов: «смотрите, как я умею…» Остальные 50% со слов «нет, смотри как надо…»

факт передачи ЯО одной стране в обмен на обещания от другой - это какой-то оксюморон, который уже говорит о том какие руководители на украине были с самого начала.

Представьте, что у вас есть, скажем, бочка дорогостоящего и сильнодействующего ядохимиката. Поля от вредителей обрабатывать. Но у вас нет безопасного средства доставить этот ядохимикат на поля, и нет безопасного способа воспользоваться этим ядохимикатом. А условия хранения этого ядохимиката сложные. Нужно поддерживать температуру, влажность, да и сама бочка скоро проржавеет и потечёт. А денег на всё это нету. Что делать с этой бочкой?

И тут сосед предлагает: отдай эту бочку мне. Я о ней позабочусь.

Ну вот и вся краткая история…

Ну так это компилируемый язык, и всё, что нужно знать IDE для отладки это заранее подготовленную матаинформацию, что с чем соотносить в окне отладки.

Так-то у меня и в Turbo-Pascal 5 не было проблем с интегрированной отладкой.

Hidden text

А в случае Docker скорее надо сравнивать с standalone отладкой. На примере того же TP-5, представим, что мы разработали программу. Скажем, управляющую оборудованием в операционной (истинная правда, такая программа была написана даже на 4-м Паскале). И в ней что-то идёт не так. Причём в лабораторных условиях проблему воспроизвести не удаётся. Тогда приходится вылезать из удобной IDE, брать исходники, создавать файлы с метаинформации, standalone debugger и идти дебажить в полевые условия.

Так что вот такой кейс ближе к описываемому сценарию отладки.

Согласен. Крайне нездоровое увлечение. Как минимум пользы здоровью оно не приносит. Если не вредит, уже хорошо.

Сам спросил, сам отвечу: не надо пробрасывать порт от xdebug из контейнера.

Сами средиземноморцы утверждают, что на продолжительность жизни влияет не их диета, а соблюдение сиесты.

Более того, избыток жидкости плохо сказывается на почках, которые эту жидкость обязаны выводить, а также приводит к повышению того самого кровяного давления, которого все так боятся. Лично мне непонятно, откуда взялась эта мантра про распитие воды. Хорошо, если почки здоровые и излишек без проблем выводится.

@ddruganov

Добрый день! Что-то не выходит аленький цветочек. В Windows всё немного не так, но не суть.

Вот мой Dockerfile сделанный для опытов:

Hidden text
# Базовый образ PHP
FROM php:7.4-cli

# xdebug
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
RUN install-php-extensions xdebug
ENV PHP_IDE_CONFIG='serverName=dtest'
RUN echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.start_with_request = yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.client_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.log=/var/log/xdebug.log" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.idekey = PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# Установка рабочего каталога
WORKDIR /var/www/html

# Запуск скрипта PHP со встроенным сервером
CMD ["php", "-S", "0.0.0.0:8080"]

Он просто запускает сервер PHP.

Для версии PHP 7.4 подходит xdebug версии 3. Поэтому добавил в Dockerfile его.

docker-compose.yml выглядит вот так:

Hidden text
services:
  web:
    build: .
    ports:
      - "8080:8080"
      - "9001:9001"
    volumes:
      - .:/var/www/html
    extra_hosts:
      - "host.docker.internal:host-gateway"

Контейнер собирается, запускается, работает. В корень проекта я положил index.php с вызовом phpinfo(); Видно, что xdebug подключён.

Hidden text

Сервер добавлен

Hidden text

Удалённая отладка добавлена:

Hidden text

Запускаю контейнер:

Hidden text

Контейнер успешно стартует. По адресу на хосте localhost:8080 открывается страничка.

Захожу в контейнер. Смотрю лог xdebug

Hidden text

[1] Log opened at 2024-08-07 16:20:12.945517
[1] [Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9001.
[1] [Step Debug] INFO: Connected to debugging client: host.docker.internal:9001 (through xdebug.client_host/xdebug.client_port). :-)
[1] [Step Debug] ->

[1] [Step Debug] ->

[1] Log closed at 2024-08-07 16:20:12.952640

Видно, что xdebug обращается к хосту без проблем. Дело осталось за малым, чтобы PHPStorm принял данные от xdebug.

Запускаю удалённую отладку:

Hidden text

Получаю ошибку: Port 9001 is busy.

Пытаюсь выяснить, кто же его занял: netstat -ano | findstr :9001 и вижу, что его занял PHPStorm ранее запущенным контейнером.

Что я делаю не так?

В догонку: воспроизвёл ситуацию. Ошибка была 300, а не 390. Если установлен один протокол XRay нет трафика при включённом VPN. AmneziaWG работает нормально.

Мне не понятно, как переключаться. Какие действия нужно произвести в интерфейсе.
Вот я вижу, что стоят оба протокола. Но какой из них выбран?

Hidden text

Информация

В рейтинге
2 427-й
Откуда
Иваново, Ивановская обл., Россия
Дата рождения
Зарегистрирован
Активность