• Как сделать пакетную вставку данных в таблицу без конкатенации строк?

    Shark13
    @Shark13
    Описание пакетной вставки без конкатенации есть в документации драйвера постгреса с примером
    https://godoc.org/github.com/lib/pq#hdr-Bulk_imports

    Из плюсов то, что это самый быстрый способ вставки пакета данных в постгрес из кода, быстрее чем import
    Ответ написан
    Комментировать
  • Как сохранить дашборды в графане?

    Shark13
    @Shark13
    /var/lib/grafana - возможно следует прокинуть на хост или в data-контейнер этот каталог пода графаны. В нем хранятся все пользовательские данные, конфиги, дашборды и т.д. При обновлении пода эти данные не должны теряться. Но не уверен что правильно понял вопрос
    Ответ написан
    Комментировать
  • Как в SQL сгруппировать по 1 параметру, а второй получить в виде массива/строки?

    Shark13
    @Shark13
    SELECT city, COUNT(city) AS count, string_agg(vendor, ',') FROM ctable GROUP BY city


    https://docs.microsoft.com/en-us/sql/t-sql/functio...
    https://www.postgresql.org/docs/9.5/functions-aggr...

    Возможно нужно использовать GROUP_CONCAT, зависит от БД
    SELECT city, COUNT(city) AS count, GROUP_CONCAT(vendor) FROM ctable GROUP BY city

    www.sqlines.com/mysql/functions/group_concat
    Ответ написан
  • Как правильно писать phpunit тесты?

    Shark13
    @Shark13
    Корректный тест для данного кода:
    <?php
    
    namespace Tests\Feature;
    
    use App\Services\ContentService;
    use GuzzleHttp\Client;
    use Tests\TestCase;
    
    class ContentServiceTest extends TestCase
    {
        public function testSqrt(): void
        {
            $client = new Client();
            $o = new ContentService($client);
            $this->assertEquals(4, $o->sqrt(16));
        }
    }


    Также желательно указывать аннотации в тестах, для точного сопоставления того что тестируется. Если не указать аннотации, то при построении отчета по code coverage будут учтены не только тестируемые методы, а вообще все вызовы, что использовались в рамках тестирования
    <?php
    
    namespace Tests\Feature;
    
    use App\Services\ContentService;
    use GuzzleHttp\Client;
    use Tests\TestCase;
    
    /**
     * @coversDefaultClass \App\Services\ContentService
     */
    class ContentServiceTest extends TestCase
    {
        /**
         * @covers ::sqrt
         */
        public function testSqrt(): void
        {
            $client = new Client();
            $o = new ContentService($client);
            $this->assertEquals(4, $o->sqrt(16));
        }
    }
    Ответ написан
  • Как правильно деплоить проект на php?

    Shark13
    @Shark13
    Для решения данной проблемы требуется обеспечивать обратную совместимость версий релизов. Другими словами все новые изменения не должны ломать старый код. Общий порядок деплоя новой версии происходит в 2 этапа:
    1 - применение миграций и поднятие новой версии парралельно со старой,
    2 - старая версия прекращает принимать новые запросы и останавливается при окончании обработки существующих соединенй (graceful shutdown).

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