Ответы пользователя по тегу PostgreSQL
  • Как задать переменную а потом использовать ее в запросе в Postgres?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Используйте CTE - туда слона запихнуть можно, и, если надо, то и не одного, хоть скалярно, хоть набор записей...

    Типа (игнорируя синтаксис, только принцип):
    WITH
    some_data AS ( SELECT ARRAY(1,2,3) AS some_value )
    SELECT * 
    FROM some_table
    CROSS JOIN some_data
    WHERE some_table.some_field NOT IN some_data.some_value


    К тому же такое решение вполне себе переносимое.
    Ответ написан
    1 комментарий
  • Почему сломались отчеты после миграции 1С с mssql на postgresql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SQL Server и PostgreSQL - две разные СУБД. И соответственно два разных диалекта (да, много общего, но и различий хватает). Запросы, работающие на одной СУБД, запросто могут поломаться при выполнении в другой СУБД - как совсем, до неисполнения и ошибки, так и частично, давая неверные результаты. Причём что-то легко адаптируется, а что-то не адаптируется вообще никак, требуя полного переписывания с нуля.
    Ответ написан
  • Какой формат для pg_dump порекомендуете?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Чем более "непохожи" серверы, тем проще должен быть формат дампа.

    Но начинать надо в любом случае просто с проверки совместимости. Сделайте тест-БД, пара таблиц с FK, одна функция, одна процедура, один триггер... потом забэкапьте и в скриптовый, и в архивный форматы, и проверьте, как на конкретно Вашем хосте пройдёт восстановление.
    Ответ написан
    1 комментарий
  • Позволяют ли партишены делать такое?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Можно ли создать партишен ... куда бы попадали данные только за последние 365 дней

    Нет, динамические границы раздела - такое в принципе невозможно.

    В документации показаны примеры. Когда создается базовая таблица table_base и дальше от нее создаются партишены
    Не лезьте в высокие материи, не зная основ. Начните с самого обычного RANGE PARTITIONING. Одна таблица - куча разделов, и никаких надтаблиц.
    Ответ написан
  • PostgreSQL: как дождаться ввода пароля при запуске скрипта?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Сначала запросите пароль в переменную, а потом запускайте, передавая пароль из переменной.

    @echo off
    cls
    SET /P psqlpassword="Введите пароль (Enter для завершения): "
    if "%psqlpassword%"=="" exit /b
    "C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
    pause


    Если пароль введён неверно, будет отображено сообщение об ошибке, и выполнение пойдёт дальше.

    Если надо заново запросить пароль, следует использовать проверку на ошибку:

    @echo off
    :execute_psql
    cls
    SET /P psqlpassword="Введите пароль (Enter для завершения): "
    if "%psqlpassword%"=="" exit /b
    "C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
    if errorlevel 1 goto :execute_psql
    pause


    Правда, нужно убедиться, что psql.exe её возвращает, что не факт. Также следует убедиться, что он не возвращает ошибки в иных ситуациях, когда повторный запрос пароля и запуск не требуются, или ввести проверку на код ошибки.
    Ответ написан