create table t (f jsonb);
insert into t values ('{"t_in":[0],"t_out":[1]}');
# table t;
f
-----------------------------
{"t_in": [0], "t_out": [1]}
# select f->'t_in' from t;
?column?
----------
[0]
(1 row)
select '{"t_in":[0],"t_out":[1]}'::jsonb->'t_in';
len
из символов алфавита chars
:create or replace function rand_str(len int, chars text default '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') returns text language sql as $$
SELECT string_agg (substr(chars, ceil (random() * length(chars))::integer, 1), '')
FROM generate_series(1, len)
$$;
postgres=# select rand_str(10);
rand_str
------------
wmIn59AeiS
(1 row)
postgres=# select rand_str(50, 'абвгдежзиклмнопрстуфхцчшщъыьэюя');
rand_str
----------------------------------------------------
дломчяочэатьщсдмллянблнцммюгььжзетшбзвшлежлэщдечют
(1 row)
v = {'_id': 10, 'param_name': None}
c.mogrify("SELECT * FROM table_name WHERE %(param_name)s IS NULL OR id = ANY(%(param_name)s)", v)
# b'SELECT * FROM table_name WHERE NULL IS NULL OR id = ANY(NULL)'
v = {"_id": 10, "param_name": [1, 2, 3]}
# b'SELECT * FROM table_name WHERE ARRAY[1,2,3] IS NULL OR id = ANY(ARRAY[1,2,3])'
v = {"_id": 10, "param_name": []}
c.mogrify("SELECT * FROM table_name WHERE cardinality(%(param_name)s::int[]) = 0 OR id = ANY(%(param_name)s)", v)
# b"SELECT * FROM table_name WHERE cardinality('{}'::int[]) = 0 OR id = ANY('{}')"
do $$
declare
list int[] := array[2619,1247,4159];
r text;
begin
select string_agg(relname, ',') into r from pg_class where oid = any(list);
raise notice '%', r;
end;
$$;
# NOTICE: pg_statistic,pg_type,pg_toast_2600
> \set list 2619,1247,4159
> select * from pg_class where oid in (:list);
И дальше в момент Insert'a нужно указать правильную таблицу для данных (я же правильно понял?) INSERT INTO table_base_2018
А в момент выборки можно будет выбирать из главное таблицы и она будет учитывать данные из своих паршитенов. Верно?разумеется.
У меня есть большая БД которую нужно ускорить т.к. есть тормоза при вставке новых данных (тестировал с индексами и без).
Есть ли более хитрый метод, чем просто хранить файлы расширения .sql локально?да нет, скорее всего. Git в любом случае работает с файлами.
CREATE TRIGGER transfer_insert
AFTER UPDATE ON transfer
REFERENCING NEW TABLE AS newtab OLD TABLE AS oldtab
FOR EACH STATEMENT
EXECUTE FUNCTION check_transfer_balances_to_zero();
если делать BEFORE триггер FOR EACH ROW, то там просто проверять по таблице OLD значение ключевого поля, и если = 1, то просто ничего не делать, так?
а если с помощью AFTER?
или можно, но только через вставку (INSERT через OLD) этой строки обратно в таблицу просто?
а чтобы без указания можно было бы так добавлять - возможно сделать?
INSERT INTO abonents
VALUES (DEFAULT, 'Petrov', 'Pobeda 9, 1', '8909999231')
Внешний ключ должен ссылаться на столбцы, образующие первичный ключ или ограничение уникальности. Таким образом, для связанных столбцов всегда будет существовать индекс (определённый соответствующим первичным ключом или ограничением), а значит проверки соответствия связанной строки будут выполняться эффективно
Подозреваю, что выполняется он не мгновенно. Что происходит с PostgreSQL если в момент его вставки прилетает еще несколько запросов?
Просто периодически мое приложение выполняющее вставку в БД возвращает мне 504 ошибку и очень похоже что случается именно такая ситуация.