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

Проблема с запросом

ALTER TABLE "public"."items" 
ADD CHECK CASE WHEN ((type)::text = 'WEAPON'::text)
THEN ((((((slot_type)::text = 'PRIM'::text)
  OR ((slot_type)::text = 'SUB'::text))
  OR ((slot_type)::text = 'MELEE'::text))
  OR ((slot_type)::text = 'THROWING'::text))
  OR ((slot_type)::text = 'ITEM'::text))
ELSE CASE WHEN ((type)::text = 'CHARACTER'::text)
THEN ((((((slot_type)::text = 'CHAR_RED'::text)
  OR ((slot_type)::text = 'CHAR_BLUE'::text))
  OR ((slot_type)::text = 'CHAR_HEAD'::text))
  OR ((slot_type)::text = 'CHAR_ITEM'::text))
  OR ((slot_type)::text = 'CHAR_DINO'::text))

Передача параметров в SQL-запрос из C#

Здравствуйте, передаю параметры в sql-запрос используя драйвер npgsql:

SqlCommand = new NpgsqlCommand();
....
SqlCommand.CommandText = "SELECT id,name  FROM table1 WHERE field1=:_param2 ORDER BY name;";
SqlCommand.Parameters.AddWithValue("_param2", 1);

В таком виде все прекрасно выполняется и выдаются необходимые данные, но как только я добавляю в sql-запрос параметр в раздел "select"

SqlCommand.CommandText = "SELECT id,name  :_param1 FROM table1 WHERE field1=:_param2 ORDER BY name;";

LSH или подобные методы поиска

Данные это множество одномерных массивов одинакого размера

[1,2,3,4,5,6,7]
[1,22,3,43,5,6,7]
[14,32,31,4,5,6,667]
И т.д

На входе поступают такие же массивы и задача выбрать наиболее похожие (близкие) к нему отсортированные сверху вниз.

Нашел LSH (http://en.wikipedia.org/wiki/Locality-sensitive_hashing).

Как подобную задачу можно реализовать с постгресе?

xpath_table

Здравствуйте!
Пытаюсь записать данные из XML в таблицу. Выходит ошибка
функция xpath_table не существует (версия PostgreSQL 9.3)

Подскажите, почему не найдена функция xpath_table и как ее вызвать?

Выполнение pl/pgsql скриптов в C#

Здравствуйте, имеется sql-скрипт

DECLARE @Id;
BEGIN TRANSACTION;
  SET @Id = INSERT INTO table1 (f1, f2) VALUES (val1, val2) returning id;
  INSERT INTO table2  (f3,f4) VALUES (@Id,val4);
  INSERT INTO table2  (f3,f4) VALUES (@Id,val5);
COMMIT TRANSACTION;

Как этот скрипт можно запустить средствами библиотеки Npgsql в C#?

Если запускать через

NpgsqlCommand Command = new NpgsqlCommand(query, Connection);
Connection.Open();
try
{
    Command.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
    Connection.Close();

PostgreSQL 9.1.2-1.1C(x64) Сервер 1С:Предприятие 8.2 Ошибка СУБД

PostgreSQL 9.1.2-1.1C(x64)
Ошибка СУБД - ERROR : could not read block 4200 in file "base/16400/4506195" : read only 0 of 8192 bytes.
База 1С Зарплата и кадры Бюджетного учреждения. База работает а бэкапить эта ошибка не дает.
Сам я в СУБД не специалист сразу оговорюсь,
стандартными средствами в программе PGAdmin и конфигураторе 1С данную ошибку исправить не можем
бекап последний аж месяц назад делался до отпуска может есть какой нибудь скрипт исправляющий данную ошибку. Пожалуйста помогите в моем вопросе (скриншоты прилагаю)

Возврат значения

• Для заданных значений имени и адреса человека возвратить значение 1, если тот является актером, но не руководящим лицом, 2 – если человек является руководителем, но не относится к числу актеров, 3 - если человека с указанным и адресом нет ни в когорте актеров, ни в обойме руководителей.

create or replace function z3(character)
returns character as
$$
declare tmp_id_act int;
begin
select id,actor,head from people where lname=$1 into tmp_id_act;
if(tmp_id_act is null) then return 'Нет такого актера в базе';end if;

Предложение delete

Здравствуйте, подскажите, есть, например, у меня 2 таблицы А с полями ID integer, date_1 timestamp и B c полями ID integer, date_2 timestamp
Нужно удалить записи из таблицы А, в которых ID совпадает с ID из B и в которых date_1 > date_2

Как выполнить первое условие нашел
delete from a where ID in (select ID from b), а как можно добавить условие date_1 > date_2 ?

Удаление пустых ячеек

Добрый день, подскажите, есть у меня таблица Flights с полями Price integer и Name varchar

Требуется удалить записи, где не заполнено хотя бы одно поле

Я написал команду
Delete from Flights where Price=NULL or Name = NULL но постгрес пишет, что удалил 0 записей. ( хотя, конечно, записи с пропущенными полями присутствуют). Очевидно, в пустышках лежит не NULL, а что-то другое
Как мне выполнить этот запрос?

Прописывать defaul 0 и потом сравнивать поле с 0 нельзя

Синхронизация таблиц из разных БД.

Здравствуйте друзья. Не без вашей помощи написал триггер на синхронизацию таблиц в двух разных базах данных.

CREATE OR REPLACE FUNCTION dorojnaya_set1_update()
  RETURNS TRIGGER AS
$BODY$
   BEGIN 
         perform dblink_connect('hostaddr=***.***.**.*** port=5432 dbname=***** user=alimuradov password=******');
	 perform dblink_exec(format('insert into dorojnaya_set (id, the_geom, objectcode, objectkey, objectid) values (%s, CAST(%L AS geometry), %L, %L, %L)', new.id, new.the_geom, new.objectcode, new.objectkey, new.objectid));	 	
         perform dblink_disconnect(); 

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

Back to top

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