Вопросы по SQL и другие аспекты работы PostgreSQL

warning: Creating default object from empty value in /var/www/victor/web/pgdocs.ru/data/modules/taxonomy/taxonomy.pages.inc on line 33.
Здесь обсуждаются запросы на SQL в PostgreSQL. Оптимизация запросов, реализация, подходы и т.д.

update jsonb

Как изменить данные в jsonb поле ?

Недокументированная фича

Всем доброго времени!

Надеюсь, название темы привлекло внимание экспертов :)

С Постгресом знаком давно, но только сейчас наткнулся на "интересное" поведение.

Есть большая таблица, точнее, таблица-мастер и таблицы-потомки. Партицирование идет по полю, хранящему дату, на это же поле навешан индекс. Хотя, может партицирование здесь и не при чем.

Этот запрос отрабатывает влет:

SELECT * FROM master_table WHERE mydate >= 'вчера'

а этот запрос около 10 минут:
SELECT * FROM master_table WHERE mydate >= 'вчера' AND mydate <= 'сегодня'

SP-GiST индексы. Проблема создания

Добрый день.

Кто-нибудь использовал эти индексы?

Делаю запрос:

CREATE INDEX pt_index ON marker USING spgist(point);
 
ERROR:  DATA type geometry has no DEFAULT operator class FOR access method "spgist"
HINT:  You must specify an operator class FOR the INDEX OR define a DEFAULT operator class FOR the DATA type.

При явном указании operator class идет такая ошибка:

CREATE INDEX pt_index ON marker USING spgist(point quad_point_ops);
 
ERROR: operator class "quad_point_ops" does NOT accept DATA type geometry
SQL-состояние: 42804

Как сделать бекап базы?

Да, я совсем новичок, с базами конкретно не работал, опыта 0
Есть необходимость сделать бекап одной из баз.

Подключился к серверу
sudo -u postgres psql

Посмотрел список баз
select * from pg_database;

Выбрал нужную, по мануалам пробовал разные варианты, возьмем самый простой, без дополнительных параметров

pg_dump имя_БД > файл_дампа

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

PostGIS кластеризация

Добрый день.

Меня интересует вопрос кластеризации геопространственных данных. Конкретно точек.
И у меня в голове сидит мысль по этому поводу.

В PostGIS существуют пространсвенные индексы, которые представляют собой R-деревья.

Символы после названия командной строки

Когда с помощью psql перехожу к управлению базой данных "db" следующая строка принимает такой вид:
db=# (как я читал, это обозначает права суперюзера)
дальше ввожу команды.

Но если ввел команду неправильно и нажал Enter, ничего не выполняется, а следующая строка принимает вид:
db-#

Дальше ввожу команду правильно, но выскакивает ошибка:
ERROR: syntax error at or near "db"
LINE 1: db
^

Потом всё норм и дальше идет опять нормальная строка:
db=#

Что это за пакость и как с ней бороться? Как использовать -#?
Спасибо за ответы!

php + postgresql

Как сделать,чтобы выводилась не 1 строка,а вся таблица?

<?php
$host = "***"; \\имя хоста
$user = "***"; \\логин
$pass = "***";  \\пасс
$db = "***"; \\имя дб
$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    OR die ("Could not connect to server\n"); 
 
$query = "SELECT   tag FROM   public.id ORDER BY \"Time\" DESC LIMIT 100  ;";  //свой запрос
$rs = pg_query($con, $query) OR die("Cannot execute query: $query\n");
 
while ($row = pg_fetch_row($rs)) {
$Arr[]=$row[0];
}
pg_close($con); 
echo json_encode($Arr);
?>

Что не так?

Стоит PostgreSQL 8.4,при попытке создать триггер выдает следующую ошибку!На PostgreSQL 9.0 все работает,но надо на PostgreSQL 8.4 чтоб работало!Помогите,пожалуйста!Спасибо

CREATE FUNCTION ЗаписДати()
RETURNS TRIGGER
AS $$DECLARE
	rec record;
    BEGIN   /*Начало основного программного блока функции*/
       SELECT INTO rec *
       FROM Оплата WHERE дата_приїзду>дата_відїзду;
       IF  found
	THEN    RAISE EXCEPTION 'Введите правильные даты';
	else
	RETURN new;
       end IF;
      END;$$
LANGUAGE 'plpgsql';

CREATE TRIGGER ЗаписДати   /*Создать триггер*/

Как ускорить выполнение запросов

У меня есть БД на Postgre (сервер на Windows). В конфигурациях внесла изменения - shared_buffers = 1GB, temp_buffers = 256MB, work_mem = 512MB. Индексы есть на всех часто используемых колонках. Однако выполнение запросов все равно происходит медленно.
Пример запроса -
select distinct us_category_id as cat, count(h_user_id) as res from web_hits
inner join users on h_user_id = us_id
where (h_datetime)::date = ('2015-06-26')::date and us_category_id != ''
group by us_category_id

Explain analyse:

Помогите по работе с двумя базами данных.

Столкнулся с необходимостью ручного переноса данных из одной базы данных Постгре в другую базу, тоже Постгре и даже работающую на этом же сервере. Рекомендация производителя ПО, так сказать.

Пытаюсь это дело автоматизировать. Выглядит оно примерно так:

1.Читаем строки из базы gps таблица object1:

SELECT external_id,coord_y,coord_x FROM object1 WHERE coord_x>0 AND coord_y>0 AND device_id=0  ORDER BY external_id

Собранный материал

Back to top

(С) Виктор Вислобоков, 2008-2023