Ответы пользователя по тегу PostgreSQL
  • PostgreSQL использование COPY на удаленной БД?

    @Rickkk
    Что вам мешает выполнить свой php скрипт с COPY на удаленном сервере через ssh-соединение? Вы также через это же соединение можете выполнить psql команду. В конце транзакции с COPY можно сохранять флаг успешности данной транзакции в какой-нибудь таблице БД и проверять его с основного сервера.
    Ответ написан
  • Почему с CASE работает, а с IF - нет?

    @Rickkk
    Ну вообще в case после then или else нельзя указывать ничего, кроме результата по данному условию -
    вот ссылка А в IF, можно писать
    какие-либо выражения и операторы. IF не обязательно должен возвращать результат, а CASE обязательно. Поскольку IF неоднозначен, поэтому его вывод нельзя присваивать переменной, как ты это делаешь в 1-м варианте.
    Ответ написан
  • Как заменить текст значения в запросе sql во время поиска?

    @Rickkk
    Посмотрел задачу. Мне кажется, что эта проблема решается с использованием таблицы соответствий полных и коротких правовых форм. Вот скрипт:

    --таблица с заводами
    create table test_tbl 
    (
    Name_full text
    );
    
    insert into test_tbl 
    select 'Акционерное общество "Саранский завод Пупкина"';
    
    
    
    --таблица соответствий правовых форм
    create table prav_forms 
    (
    short_form text,
    full_form text
    );
    
    --заполняем таблицу
    insert into prav_forms(short_form,full_form)
    select 'ао','акционерное общество'
    union
    select 'зао','закрытое акционерное общество'
    union 
    select 'ооо','общество с ограниченной ответственностью';
    
    
    --выходной запрос
    
    with ish as(
    --что ищем
    select 'ао "Саранский завод Пупкина"'::text  as search_str
    ),
    ish2 as (
    --получаем форму и завод регулярками
    select (regexp_matches(search_str, '(\w+)'))[1] as form,
    (regexp_matches(search_str, '\"[\w\s]+\"'))[1] as form2
     from ish
    )
    ,
    ish3 as (
    --находим запись по короткому наименованию 
    select * from test_tbl where lower(Name_full)=(select lower(search_str) from ish limit 1)
    )
    --выборка
    select * from ish3
    union
    --если по короткому не найдено, то получаем полную форму и ищем по ней
    select * from test_tbl tt
    where not exists(select * from ish3)
    and lower(tt.Name_full) in (select 
    lower(pv.full_form || ' ' || ish2.form2)
     from ish2 inner join prav_forms pv on 
    lower(pv.short_form)=lower(ish2.form)
    limit 1
    );
    Ответ написан
  • Базы данный какой тип поля выбрать?

    @Rickkk
    Приветствую!
    Зачем вставлять значение времени из Python? Гораздо надежней, чтобы сама СУБД при вставке записи в таблицу ставила текущий timestamp.
    Для этого просто нужно добавить поле created_at в таблицу с default now:
    create table mytable 
    (
    ...
    created_at timestamp not null default now()
    );
    Ответ написан