Ответы пользователя по тегу PostgreSQL
  • COPY в Postgresql?

    @galaxy
    Слейте все в один файл.
    Под *nix одной командой:
    tail -qn +2 files/*.txt > data.csv
    (если все файлы в одной папке files)

    Ну либо берете список файлов (из вывода dir / ls) и, допустим, в продвинутом текстовом редакторе дописываете к каждому названию куски команды COPY. Получится один большой скрипт
    Ответ написан
    1 комментарий
  • Как вернуть записи из каждой группы с минимальной датой создания?

    @galaxy
    возвращать одно рандомное из дублей, но тогда есть вероятность вывода неправильного результата

    а в чем неправильность такого результата?

    В любом случае, группировка и джойн тут избыточны:
    SELECT DISTINCT ON (project_id) *
      FROM tasks
     WHERE tasks.id = ANY (...)
     ORDER BY project_id, created
    Ответ написан
    2 комментария
  • Как сделать рекурсивный запрос с возвращением всех пройденных элементов?

    @galaxy
    with recursive q as (
        select * from tes where from_id = 1
         union all
        select tes.* from tes, q where tes.from_id = q.to_id
    )
    select * from q order by from_id, to_id

    https://www.db-fiddle.com/f/4jyoMCicNSZpjMt4jFYoz5/4445
    Ответ написан
  • Как разблокировать колонки в postgresql?

    @galaxy
    Нет первичного ключа (primary key), вот и блокирует. Это не Excel.

    Хотите как в экселе - ну и экспортируйте в него данные, потом обратно залейте
    Ответ написан
  • Найти поле по значению pgadmin?

    @galaxy
    Дурацкая задача какая-то...
    Ну допустим, если база небольшая, то pg_dump в текстовый формат + grep
    Ответ написан
    Комментировать
  • Как запретить ввод в таблицу пустого поля?

    @galaxy
    Где вы увидели пустой id?

    BIGSERIAL - равносильно полю типа BIGINT с DEFAULT значением из автоматически создаваемого сиквенса (сделайте \d+ myTable в psql для интереса), так что если вы не указываете значение для id в INSERT, оно берется из сиквенса.
    По этой же причине
    INSERT INTO myTable(lastName) VALUES('upsertedLastNameOnly orger') ON CONFLICT (id)
    не имеет смысла, т.к. конфликта по id тут быть не может.

    В общем, что конкретно вы хотите? Поле id у вас заполняется и не может быть пустым
    Ответ написан
    Комментировать
  • Создание таблицы в postgresql - TIME WITH TIME ZONE?

    @galaxy
    В вашем запросе вы потеряли закрывающую скобку.

    Тип TIME WITH TIME ZONE существует, но он слегка странный, т.к. без даты (а этот тип только про время внутри суток - от 00:00 до 23:59) зона несколько бессмысленна.

    Нужно хранить время (внутри суток) - TIME.
    Дату без времени - DATE.
    Временную метку - TIMESTAMP (with time zone / without time zone).
    https://www.postgresql.org/docs/current/datatype-d...

    Разница между with time zone / without time zone: TIMESTAMP WITH TIME ZONE хранится внутренне в UTC, при записи конвертируется из текущей временной зоны; TIMESTAMP WITHOUT TIME ZONE хранится как есть, без конвертаций.
    Что использовать - зависит от приложения и вообще организации работы с БД. Для одного приложения (типа вебсайта) в принципе пофигу
    Ответ написан
  • Как проверять процедуру с out-параметром через расширение plpgsql_check?

    @galaxy
    Ну там по идее сигнатура в стиле regprocedure передается. OUT-параметры на сигнатуру не влияют, так что просто:
    SELECT * from sys_addons.plpgsql_check_function('helpdesk.create_issue(json)');


    можно проверить сначала кастом к regprocedure:
    SELECT 'helpdesk.create_issue(json)'::regprocedure;
    Ответ написан
  • Как подключиться к psql на Ubuntu с использованием библиотеки aiogram?

    @galaxy
    # здесь указал пароль от учетной записи ubuntu с одноименным именем username

    Пароль учетной записи ubuntu не имеет отношения к паролю пользователя в postgres. Вы, похоже, вообще не создавали пароль там.
    Заходите в psql под username, там есть команда \password
    Ответ написан
  • Golang jetbrains не читает БД в sql?

    @galaxy
    Если я правильно понял вопрос (а это непросто), то потому что язык SQL - нечувствителен к регистру, т.е. следующие запросы эквивалентны:
    select * from Groups;
    select * from groups;
    select * from GROUPS;
    SELECT * FROM groups;
    SeLeCt * FrOm GrOuPs;


    Если вы берете название таблицы/колонки (или иного объекта БД) в кавычки, он становится (по крайней мере, согласно SQL стандарту) case-sensitive, т.е. "group"/"Groups"/"gRoUps" - будут разными идентификаторами (например, все три такие таблицы могут существовать в БД одновременно).
    Если кавычек нет, идентификаторы по стандарту сравниваются после приведения к upper-case. В Postgres это немного не так: там идентификаторы без кавычек приводятся к lower-case.

    Т.е. другими словами, запрос create table Groups ... создаст в Postgres таблицу с именем groups. Запрос select * from GrOupS; будет также искать таблицу с именем groups.
    При использовании кавычек запрос create table "Groups" ... создаст таблицу с именем Groups. Запрос select * from "GrOupS"; будет также искать таблицу с именем GrOupS.
    spoiler
    Речь выше только про Postgresql. Другие СУБД могут вести (и ведут) себя по-другому. Так, в mysql поведение идентификаторов зависит от ОС (точнее, от того, case sensitive/insensitive ее файловая система) и от конфигурации БД.


    Обычно это не вызывает проблем, пока вы не начинаете использовать закавыченные и незакавыченные идентификаторы одновременно. Например, что скорее всего имеет место в вашем случае, таблица создается запросом
    create table Groups ...
    -- реальное имя таблицы - groups

    Когда же вы делаете запрос select * from "Groups", обращение идет к несуществующей таблице Groups.

    В общем, разберитесь, какое название у таблицы в БД (в psql команда \dt, или смотрите свойства таблицы в своей среде). Если оно не lower-case, используйте кавычки с точным названием (например, select * from "GROUPS"), в противном случае лучше обходиться вообще без кавычек.
    Ответ написан
    Комментировать
  • Django не видит команды "createuser" для PostgreSQL?

    @galaxy
    В системных (или pycharm'овских) путях нет папки с бинарниками постгреса.

    Создать юзера можно и в pgAdmin (и в psql).
    Ответ написан
    2 комментария
  • SELECT если есть в стоблце?

    @galaxy
    Сделать то, что вам нужно, в Постгресе не проблема, можно даже несколькими способами. Например:
    SELECT * FROM table WHERE value = ANY(string_to_array(index, ', ')::int[])

    Можно и проиндексировать при необходимости.
    Ответ написан
    Комментировать
  • Как исправить кракозябры вместо кириллицы в дампе PostgreSQL?

    @galaxy
    Попробуйте сделать дамп так:
    pg_dump -U postgres -W -E UTF8 -d dbname -f dbname.sql

    т.к. возможно глючит перенаправление
    Ответ написан
    1 комментарий
  • Как решить psql: ошибка: подключиться к серверу "localhost" (::1) не удалось?

    @galaxy
    Если свежепоставленный постгрес, пробуйте psql -U postgres, т.к. инсталлятор не создает в самом постгресе учеток с вашим именем
    Ответ написан
    1 комментарий
  • В чём разница между Postgre SQL и Postgre Pro?

    @galaxy
    Если вас интересуют функциональные отличия - https://postgrespro.ru/docs/postgrespro/14/intro-p...

    Ну и Postgres Pro - не бесплатная:
    https://postgrespro.ru/products/postgrespro/certified
    https://www.syssoft.ru/postgres-professional/postg...
    Ответ написан
    Комментировать
  • Надо ли ставить commit в конструкции with?

    @galaxy
    Конструкция with кажется предполагает закрытие соединения с БД

    не предполагает:
    Cursors can be used as context managers: leaving the context will close the cursor.


    Cоединение закрывает только метод close() объекта connection (или del на connection).

    Делать commit() в вашем случае необходимо, т.к. по умолчанию psycopg открывает транзакцию перед выполнением первого запроса. Другой вариант - работать в режиме autocommit.

    Вообще, на будущее, - конструкции с with делают в разных драйверах СУБД разные вещи и не регламентируются DB-API. Так что надо либо внимательно курить документацию, либо их не использовать.
    Ответ написан
    Комментировать
  • Не могу сделать запись в таблицу pgadmin4?

    @galaxy
    Нет первичного ключа, скорее всего
    Ответ написан
    2 комментария
  • Как решить User `postgres` was denied access on the database `.public`?

    @galaxy
    Ошибка не постгресовая. Юзер postgres - обычно суперпользователь, каких-то прав ему не хватать не может (кроме единственного права на логин).
    Вы подключиться через psql (или любой другой клиент) к БД с этими данными можете?
    Проблем с сетью нет? Из докера есть доступ к 172.17.0.1:5432?
    Ответ написан
  • Полнотекстовый поиск PostgreSQL внутри JSON, индекс внутри JSON?

    @galaxy
    Сделать-то можно. Но лучше все-таки хотя бы отдельное поле под tsvector завести.
    create table t (col jsonb);
    create index ix_t_col using gin(to_tsvector('pg_catalog.english', jsonb_path_query_array(col, '$.obj.TEXT')));
    
    insert into t values('{
    "obj": [
    {
    "TEXT": "These functions act like their counterparts described above without the _tz suffix, except that these functions support comparisons of date/time values that require timezone-aware conversions.",
    "key1": 77,
    "key2": "a"
    },
    {
    "TEXT": "Returns target with new_value inserted. If the item designated by the path is an array element, new_value will be inserted before that item if insert_after is false (which is the default), or after it if insert_after is true. If the item designated by the path is an object field, new_value will be inserted only if the object does not already contain that key",
    "key1": 99,
    "key2": false
    }
    ]
    }');
    
    
    select ts_headline(col, 'function'::tsquery),
           ts_headline(arr, 'function'::tsquery)
      from (
        select col, jsonb_path_query_array(col, '$.obj.TEXT') arr,
               to_tsvector('pg_catalog.english', jsonb_path_query_array(col, '$.obj.TEXT')) tsv 
          from t
      ) q
     where tsv @@ 'function'::tsquery;


    jsonb_path_query_array(col, '$.obj.TEXT') - выделяет все, что у вас по ключу TEXT в массив. Дальше он индексируется
    Ответ написан
  • Ошибки после подключения к базе данных?

    @galaxy
    PostgreSQL 9.4.13 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit


    Django supports PostgreSQL 10 and higher. psycopg2 2.8.4 or higher is required, though the latest release is recommended.

    https://docs.djangoproject.com/en/4.0/ref/database...
    Ответ написан
    Комментировать