Вопросы по 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. Оптимизация запросов, реализация, подходы и т.д.

Генерация идентификаторов

Всем добрый день.
Возникла необходимость создания таблицы, в которой одна колонка играла бы роль первичного ключа и заполнялась автоматически.
Немного погуглив, я наткнулся на решение с использованием SEQUENCE

CREATE SEQUENCE testseq MINVALUE 1 MAXVALUE 5 CYCLE;

После создаю таблицу

CREATE TABLE foo (
    id integer NOT NULL DEFAULT NEXTVAL('testseq'),
    name text,
    PRIMARY KEY (id)
 );

Добавляю в нее значения

INSERT INTO foo (name) VALUES('A');
INSERT INTO foo (name) VALUES('B');
INSERT INTO foo (name) VALUES('C');

Адаптация SQL

Граждане, товарищи, подскажите, пожалуйста, как решить такую задачку (вроде и не сложную, если возможную):

есть запрос вида

SELECT t.oid, format_type(t.oid, -1) AS basetype
  FROM pg_proc p 
    INNER JOIN pg_type t 
      ON t.oid = p.prorettype OR t.oid = ANY (p.proargtypes) OR t.oid = ANY (p.proallargtypes)

Задача в том, что бы он заработал в версии 7.3, т.е. где нет ANY и соответственно не обойдешься просто IN и EXISTS в виду типа oidvector (в другом примере тип int2vector).

Идеи?

Вложенные PQclear();

Работаю с постгрес из с++

Для очистки памяти от результатов запроса использую PQclear():

Есть два запроса в цикле

PGresult* res_1;
PGresult* res_2;
 
zapr="Select * fromе table1;
res_1=PQexec(p_pgconn_my_db, zapr.c_str());
 
for(i=0; i<PQntuples(res_1); i++){
zapr="SELECT * FROMе table2 WHERE  pole1=PQgetvalue(res_1, 0, 0);
res_2=PQexec(p_pgconn_my_db, zapr.c_str());
PQclear(res_2); 
}
 
PQclear(res_1);

замена файлов

Уважаемые гуру. научите пож-та. есть база 1с на посгри. во время обновления вылетела 1с 8.
народ предлагает востановить тока через pgadmin след образом.
через PG_ADMIN
1. copy config to '/home/user/config_1.txt в упавшей базе
2. copy config to '/home/user/config_0.txt в базе поднятой из последнего бэкапа
3. delete from config в упавшей базе
4. copy config from '/home/user/config_0.txt в упавшей базе

можно тоже самое сделать тока через консоль ?? без поднятия pgadmin ??

принцип работы " ilike '%' "

Здравствуйте. Никак не могу понять почему такая разница в скорости выполнения хранимой процедуры. Хотя это в принципе одно и то же.

PostgreSQL 9.1.

В первом варианте выполняется ~50ms

CREATE OR REPLACE FUNCTION get_data(IN source_str varchar(100))
RETURNS TABLE(tag1 varchar(100), tag2 varchar(100), tag3 varchar(100)) AS
$BODY$
BEGIN
RETURN QUERY
select table1.name, table2.name, table3.name
from table1, table2, table3
where table3.id = table2.id_tab3
and table1.id_tab2 = table2.id
and (table1.name ilike 'xyz%')
and (table2.name ilike '%')

pgpool

Два вопроса относительно pgpool:
1) pgpool реплицирует БД только в синхронном режиме?
2) при пропадании связи с одним из сервером (например отлючаю сеть), мастер-мастер репликация не возобновляет свою работу (если пытался в период отстуствия связи внести изменения БД), пока не выполню следующие действия: остановить pgpool, удалить файл "pgpool_status", запустить pgpool. Если все должно быть гораздо проще - подскажите, пожалуйста, настройки

хитрый селект и апдей

Добрый день.
В первый раз работаю с постгре после.
есть таблица вида:
id | phone | userId | summ

Нужно выбрать все записи, телефоны которых входят в массив. Грубо говоря: SELECT * from 'table' where 'phone' in array (phone1, phone2, phone2 ...)
И поменять в там же значения phone и userId опять же по массиву значений.

Поскажите плиз как это грамотно сделать.

Загрузка запроса с файла

Возможно ли сделать так?
Написать какой нибудь select запрос(select * from table1;) в файле selectsql и сохранить. И в командной строке указать PostgreSQL9, чтобы загрузил и запустил команду находящиеся в файле /home/selectsql.

Streaming Replication

Streaming Replication может ли работать в режиме master-master репликации (аналогично Bucardo)?

CREATE TABLE

В документации есть очень полезная опция [ IF NOT EXISTS ]
В жизни pgAdmin на CREATE TABLE IF NOT EXISTS qqq ... ругается
ERROR: syntax error at or near "not"
LINE 1: create table if not exists qqq

Что делать и кто виноват? Как побороть/обойти?

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

Back to top

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