-- date('now', 'start of day')
date_trunc('day', now())
-- date('now', 'start of month')
date_trunc('month', now())
-- date('now', '-6 days')
now() - INTERVAL '6 days'
jsonb_set(ExternalUrls, '{0,Url}', '"https://example/browse/CP-12"')
- заменит ключ Url в элементе с индексом 0 массива из ExternalUrls. Она возвращает новый JSONB объект, обновление колонок таблиц в SQL в любом случае делается через UPDATE:UPDATE ExternalWorkItems
SET ExternalUrls = jsonb_set(ExternalUrls, '{0,Url}', '"https://example/browse/CP-12"');
{*,Url}
, чтобы поменять сразу все элементы массива ExternalUrls (если у вас их там больше одного).UPDATE ExternalWorkItems
SET ExternalUrls = jsonb_set(
ExternalUrls, '{0,Url}',
to_jsonb(replace(ExternalUrls #>> '{0,Url}', 'test', 'example'))
);
UPDATE ExternalWorkItems SET ExternalUrls = replace(ExternalUrls::text, 'https://test', 'https://example')::jsonb;
И ещё ошибка с from psycopg2 import OperationalError, он просто не находит OperationalError
>>> from psycopg2 import OperationalError
>>> OperationalError
<class 'psycopg2.OperationalError'>
>>> psycopg2.__version__
'2.8.6 (dt dec pq3 ext lo64)'
The error 'FATAL: password authentication failed for user "postgres"
Как этот пароль посмотреть или новый создать?
ALTER ROLE postgres WITH PASSWORD '123';
или в psql \password
postgres=# select '{"email": "a@example.com", "telegram_token": "", "telegram_user_id":""}'::jsonb - 'email';
?column?
------------------------------------------------
{"telegram_token": "", "telegram_user_id": ""}
(1 row)
UPDATE group_settings
SET group_recepients = jsonb_build_object('email', subquery.email, 'telegram_token', '', 'telegram_user_id', '')
FROM (SELECT id, email from users) AS subquery WHERE group_settings.user_id = subquery.id;
IF OLD.bilet_number IN (SELECT bilet_number FROM all_lends)
хотите удалить этого абонента (и только его), то нужно было делать обычный не INSTEAD) триггер и вместо DELETE оператора в конце сделать RETURN OLD
. CREATE USER user_name PASSWORD (SELECT random_string((SELECT random_int_between(5,15))));
Non-optimizable SQL commands (also called utility commands) are not capable of accepting query parameters. So automatic substitution of PL/pgSQL variables does not work in such commands. To include non-constant text in a utility command executed from PL/pgSQL, you must build the utility command as a string and then EXECUTE it, as discussed in Section 43.5.4.
SELECT random_string(SELECT random_int_between(5,15)) INTO pass;
EXECUTE format('CREATE USER %I PASSWORD %L', user_name, pass);
EXECUTE format('GRANT %I TO %I', role_name, user_name);
Changed in version 2.9: the table and fields names are now quoted. If you need to specify a schema-qualified table please use copy_expert().
И так получилось что Маше возвращается ID Саши, то есть ID=2;
select * from (
select DISTINCT (regexp_split_to_array(commend, E'\\s+'))[:3] as words from orders
) t
order by words[2]
2. su postgres
3. \connect my_table
psql
не забыли?\connect
нужно название БД, по умолчанию подключение идет к БД с именем юзера Linux (т.е. в вашем случае вы подключаетесь к postgres).\l
\dn
\dt sname.
\d sname.my_table
select * from my_data where to_tsvector(some_name) @@ to_tsquery('привет | замечательный | мир');
&
, |
, !
, <->
и группировку скобками.select date_trunc('hour', e.created), avg(e.value) from table e group by 1 order by 1
[00:00-07:00)
[07:00-14:00)
[14:00-21:00)
[21:00-00:00) - следующий день
[00:00-07:00) - следующий день
[00:00-07:00)
[07:00-14:00)
[14:00-21:00)
[21:00-03:00) - следующий день
[03:00-10:00) - следующий день
...
select date_trunc('day', e.created) + (trunc(extract('hour' from e.created) / 7) * 7 || ' hour')::interval, avg(e.value) from table e group by 1 order by 1