import pandas as pd
k=pd.DataFrame(['hello','doubt','hero','help'])
k.columns=['some_thing']
t=k[k['some_thing'].str.contains("hel")]
d=k.replace(t,'CS')
::: OUTPUT :::
k
Out[95]:
some_thing
0 hello
1 doubt
2 hero
3 help
t
Out[99]:
some_thing
0 hello
3 help
d
Out[96]:
some_thing
0 CS
1 doubt
2 hero
3 CS
Примечание. Как предполагал первоначальный вопросник, если вы настраиваете две базы данных на одном компьютере, вы, вероятно, захотите сделать две схемы - в этом случае вам ничего не нужно
Теперь вы можете использовать новую postgres_fdw
(внешнюю обертку данных) для подключаться к таблицам в любой базе данных Postgres - локальном или удаленном.
Обратите внимание, что есть внешние обертки данных для других популярных источников данных . В настоящее время только postgres_fdw
и file_fdw
являются частью официального дистрибутива Postgres.
Эта функция не является частью PostgreSQL по умолчанию install, но вы можете добавить его. Он называется dblink
.
Я никогда не использовал его, но он поддерживается и распространяется вместе с остальной частью PostgreSQL. Если вы используете версию PostgreSQL, поставляемую с дистрибутивом Linux, вам может потребоваться установить пакет postgresql-contrib.
dblink выполняет запрос (обычно это SELECT, но это может быть любой оператор SQL, который возвращает строки) в удаленной базе данных.
Когда указаны два текстовых аргумента, первый сначала рассматривается как имя постоянного соединения; если он найден, команда выполняется по этому соединению. Если не найден, первый аргумент рассматривается как строка информации о соединении, как для dblink_connect, и указанное соединение выполняется только для продолжительности этой команды.
blockquote>один из хороших примеров:
SELECT * FROM table1 tb1 LEFT JOIN ( SELECT * FROM dblink('dbname=db2','SELECT id, code FROM table2') AS tb2(id int, code text); ) AS tb2 ON tb2.column = tb1.column;
Примечание: Я даю эту информацию для дальнейшего использования. Refrence
Если производительность важна, и большинство запросов доступны только для чтения, я бы предложил реплицировать данные в другую базу данных. Хотя это похоже на ненужное дублирование данных, это может помочь, если требуются индексы.
Это можно сделать с помощью простых триггеров вставки, которые в свою очередь вызывают dblink для обновления другой копии. Есть также полномасштабные варианты репликации (например, Slony), но это не по теме.
Просто добавьте немного дополнительной информации.
Невозможно запросить базу данных, отличную от текущей. Поскольку PostgreSQL загружает системные каталоги, зависящие от базы данных, неясно, как должен вести себя запрос кросс-баз данных.
contrib / dblink разрешает запросы с кросс-базами, используя вызовы функций. Конечно, клиент может также делать одновременные подключения к различным базам данных и объединять результаты на стороне клиента.
blockquote>
Я столкнулся с этим до того, как пришел к тому же выводу о кросс-запросах базы данных, как и вы. То, что я закончил, было использование схем для разделения табличного пространства таким образом, чтобы я мог хранить таблицы сгруппированными, но все еще запрашивать их все.
Да, вы можете использовать DBlink (только postgresql) и DBI-Link (разрешить внешние кросс-серверы) и TDS_LInk, который позволяет запускать запросы к серверу MS SQL.
Я использовал DB- Link и TDS-link с большим успехом.
postgresql-contrib
передdblink
? Илиpostgresql-contrib
включаетdblink
? И тогда запрос OP будет работать, или вы должны запросить его по-другому? – mpen 19 June 2011 в 20:59