• Правильно ли я спроектировал распределённую систему?

    @masimka Автор вопроса
    На данный момент, было принято решение подключить таблицы размещенные на сервере другой страны в постгресе как удалённую таблицу (postgres_fdw)
    ). И через шардирование по условию определенной метки добавить в существующим таблицам. Тогда основные данные будут хранится как полагается, и данных клиента из конкретной страны будет хранится в таблицах в нужном гео.
    Ответ написан
    Комментировать
  • Как убрать кеширование расширение гугла (content_script)?

    @masimka Автор вопроса
    могу ответить на этот вопрос:
    очень просто, контент скрипт получается контент парсит его по завершению DOMContentLoaded (
    window.onload = function() {,
    document.addEventListener("DOMContentLoaded",,
    document.addEventListener("load", function() ,

    ) и отправляет сообщение в background.js
    ТОт его ложит в хранилище для дальнейшей обработки.
    Вопрос был в том что это не кеш, а страница получает контент без перезагрузки страницы.
    По этому нужно применить content oвserve и смотреть на изменение дочерних обектов.
    И для этого нужно стартовать событие на подслушивание onHistoryStateUpdated тогда будет работать.
    Ответ написан
    Комментировать
  • Почему vuex state массив объектов в харанилище состояния увеличивается на один елемент массива вместо перезаписи?

    @masimka Автор вопроса
    допустил ошибку, моя ошибка, в mutation-types.js в одном месте псевдоним мутации был в двух местах
    Ответ написан
    Комментировать
  • Чем записывать экран убунту?

    @masimka Автор вопроса
    В Kazam работают горячие клавишы. мой выбор.
    Ответ написан
    Комментировать
  • Как валидировать целостность количества переменных от пользователя?

    @masimka Автор вопроса
    Сделал в каждом модуле, доп поле с хешем от всех названий принимаемых полей., если хеш не подходит, форма не наша.
    Т.е. если в форме одна буква от названия формы не та, или есть "лишнее" поле, форма не принимается.
    ОФФ.
    Хах. Проголосовали два человека, за то, что вопрос простой, но никто на него новичку не ответил.
    Ответ написан
    Комментировать
  • Как сделать правильно check constraint?

    @masimka Автор вопроса
    теперь настроил триггер так|:
    DECLARE
    table_master    varchar(255)        := 'events';
    table_part      varchar(255)        := '';
    curr_month      varchar(255)        := '';
    
    next_month      varchar(255)        := '';
    
    month_number    integer       := 0;
    month_number_text    varchar(255)       :='';
    
    BEGIN
    
    month_number := date_part( 'month', NEW.dtime);
    
    IF month_number < 10 THEN
    month_number_text := '0'|| month_number::text;
    
    END IF;
    -- Даём имя партиции --------------------------------------------------
    table_part := table_master
    || '' || to_char(NEW.dtime::date, 'YYYY')::text
    || 'm' || to_char(NEW.dtime::date, 'MM')::text;
    
    --date '2001-12-28' + interval '1 month'
    
    curr_month :=  date_part( 'year', NEW.dtime)::text ||'-'||to_char(NEW.dtime::date, 'MM')::text ||'-01';
    
    -- next_month :=  date_part( 'year', NEW.dtime)::text ||'-'|| month_number_text ||'-31';
    next_month :=   NEW.dtime + interval '1 month';
    next_month :=   to_char(next_month::date, 'YYYY-MM')||'-01';
    
    
    -- Проверяем партицию на существование --------------------------------
    PERFORM
    1
    FROM
    pg_class
    WHERE
    relname = table_part
    LIMIT
    1;
    
    -- Если её ещё нет, то создаём --------------------------------------------
    IF NOT FOUND
    THEN
    -- Cоздаём партицию, наследуя мастер-таблицу --------------------------
    EXECUTE '
                 CREATE TABLE ' || table_part || ' (  like '|| table_master ||' including all ) inherits ('|| table_master ||')'   ;
    EXECUTE '
          alter table  ' || table_part || '  add CONSTRAINT dtime_check CHECK (dtime >= '''|| curr_month||'''::timestamp AND dtime < '''||next_month||'''::timestamp)';
    
    END IF;
    
    
    
    -- Вставляем данные в партицию --------------------------------------------
    EXECUTE '
            INSERT INTO ' || table_part || '
            SELECT ( (' || quote_literal(NEW) || ')::' || TG_RELNAME || ' ).*';
    
    RETURN NULL;
    END;


    и все автозаполнения заработали.
    DECLARE
    table_master    varchar(255)        := 'events';
    table_part      varchar(255)        := '';
    curr_month      varchar(255)        := '';
    
    next_month      varchar(255)        := '';
    
    month_number    integer       := 0;
    month_number_text    varchar(255)       :='';
    
    BEGIN
    
    month_number := date_part( 'month', NEW.dtime);
    
    IF month_number < 10 THEN
    month_number_text := '0'|| month_number::text;
    
    END IF;
    -- Даём имя партиции --------------------------------------------------
    table_part := table_master
    || '' || to_char(NEW.dtime::date, 'YYYY')::text
    || 'm' || to_char(NEW.dtime::date, 'MM')::text;
    
    --date '2001-12-28' + interval '1 month'
    
    curr_month :=  date_part( 'year', NEW.dtime)::text ||'-'||to_char(NEW.dtime::date, 'MM')::text ||'-01';
    
    -- next_month :=  date_part( 'year', NEW.dtime)::text ||'-'|| month_number_text ||'-31';
    next_month :=   NEW.dtime + interval '1 month';
    next_month :=   to_char(next_month::date, 'YYYY-MM')||'-01';
    
    
    -- Проверяем партицию на существование --------------------------------
    PERFORM
    1
    FROM
    pg_class
    WHERE
    relname = table_part
    LIMIT
    1;
    
    -- Если её ещё нет, то создаём --------------------------------------------
    IF NOT FOUND
    THEN
    -- Cоздаём партицию, наследуя мастер-таблицу --------------------------
    EXECUTE '
                 CREATE TABLE ' || table_part || ' (  like '|| table_master ||' including all ) inherits ('|| table_master ||')'   ;
    EXECUTE '
          alter table  ' || table_part || '  add CONSTRAINT dtime_check CHECK (dtime >= '''|| curr_month||'''::timestamp AND dtime < '''||next_month||'''::timestamp)';
    
    END IF;
    
    
    
    -- Вставляем данные в партицию --------------------------------------------
    EXECUTE '
            INSERT INTO ' || table_part || '
            SELECT ( (' || quote_literal(NEW) || ')::' || TG_RELNAME || ' ).*';
    
    RETURN NULL;
    END;


    сейчас получилось так:
    \d+ events

    Table "public.events"
    Column | Type | Modifiers | Storage | Stats target | Description
    --------------+-----------------------------+-----------------------------------------------------+----------+--------------+-------------
    eventtype_id | integer | not null | plain | |
    order_id | integer | | plain | |
    product_id | integer | | plain | |
    user_id | integer | | plain | |
    values | character varying(64) | | extended | |
    dtime | timestamp without time zone | not null default now() | plain | |
    id | bigint | not null default nextval('events_id_seq'::regclass) | plain | |
    config_id | integer | | plain | |
    Indexes:
    "events_pkey" PRIMARY KEY, btree (id)
    "dtime" btree (dtime)
    "eventtype_id" btree (eventtype_id)
    "order_id" btree (order_id)
    "product_id" btree (product_id)
    "users_id" btree (user_id)
    Triggers:
    insert_events_trigger BEFORE INSERT ON events FOR EACH ROW EXECUTE PROCEDURE events_insert_trigger()
    Child tables: events2016m02,
    events2016m03,
    events2016m04,
    events2016m05,
    events2016m06,
    events2016m07,
    events2016m08,
    events2016m09,
    events2016m10,
    events2016m11,
    events2016m12,
    events2017m01,
    events2017m02,
    events2017m03,
    events2017m04,
    events2017m05,
    events2017m06,
    events2017m07,


    подправил формирование названия таблицы изсходя из пришедешей даты., и следующий месяц сделал первый день
    Сейчас все наследники такие:

    Check constraints:
    Check constraints:
    "dtime_check" CHECK (dtime >= '2017-04-01 00:00:00'::timestamp without time zone AND dtime < '2017-05-01 00:00:00'::timestamp without time zone)
    Inherits: events
    Ответ написан
    Комментировать
  • Как вывести failed если условие не найдено?

    @masimka Автор вопроса
    Ответ написан
    Комментировать
  • Поему Class 'Model_role' not found на рабочем linux?

    @masimka Автор вопроса
    СОРи, загрузка классов происходит посредством указания файла класса.,
    было
    $roles = ORM::factory('role')->find_all();
    стало
    $roles = ORM::factory('Role')->find_all();
    Всё заработало.
    Ответ написан
  • Почему в методе принимает post данные?

    @masimka Автор вопроса
    Все верно. Я не учел, что метод принимающий POST в before() проверяет на авторизацию, а потом передает работу метода контроллера который уже свою очередь работает с переменной передавая ее в метод модели. Короче я забыл обновить вкладку чтобы авторизацию работала.)))
    Ответ написан
    Комментировать
  • Как разрешить php доступ к /var/lib/mysql каталогу или ко всей файловой системе linux?

    @masimka Автор вопроса
    делать СКЛ-дампы не представляется возможным в виду огромных размеров файлов баз, поэтому было принято решение просто взять файлы в архив и залить их на хост в туже папку (но уже через ssh)

    сейчас единственное что пришло в голову - перед доступом к кталогу где хранится база данных сделать ей exec-> chown на apache:apache получив доступ к файлам.

    ЗАпустить апачь или пхп от рута не будет возможным так как он запускается из бравзера.
    Под вин все работает., на центе безопасностью запрещено. Как разрешить?
    Другие варианты?
    Ответ написан