------------------------------------------------- -- encoding tests ------------------------------------------------- set client_encoding = 'utf8'; -- google translate says: -- column: コラム -- table: テーブル -- client data: クライアント側のデータ -- proxy data: プロキシデータ -- remote data: リモートデータ -- argument: 引数 set client_min_messages = 'warning'; drop database if exists test_enc_proxy; drop database if exists test_enc_part; create database test_enc_proxy with encoding 'euc_jp' lc_collate 'C' lc_ctype 'C' template template0; create database test_enc_part with encoding 'utf-8' template template0; -- initialize proxy db \c test_enc_proxy set client_encoding = 'utf-8'; set client_min_messages = 'warning'; \set ECHO none create extension plproxy; \set ECHO all create schema plproxy; create or replace function plproxy.get_cluster_version(cluster_name text) returns integer as $$ begin return 1; end; $$ language plpgsql; create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text) returns setof record as $$ begin return; end; $$ language plpgsql; create or replace function plproxy.get_cluster_partitions(cluster_name text) returns setof text as $$ begin return next 'host=127.0.0.1 dbname=test_enc_part'; return; end; $$ language plpgsql; create table intl_data (id int4, "コラム" text); create function test_encoding() returns setof intl_data as $$ cluster 'testcluster'; run on 0; select * from intl_data order by 1; $$ language plproxy; create function test_encoding2(text) returns setof intl_data as $$ cluster 'testcluster'; run on 0; select 0 as id, $1 as "コラム"; $$ language plproxy; create function test_encoding3(text) returns setof intl_data as $$ cluster 'testcluster'; run on 0; $$ language plproxy; -- initialize part db \c test_enc_part set client_min_messages = 'warning'; set client_encoding = 'utf8'; create table intl_data (id int4, "コラム" text); insert into intl_data values (1, 'リモートデータ'); create function test_encoding3(text) returns setof intl_data as $$ declare rec intl_data%rowtype; begin raise notice 'got: %', $1; rec := (3, $1); return next rec; return; end; $$ language plpgsql; set client_encoding = 'sjis'; select * from intl_data order by 1; set client_encoding = 'euc_jp'; select * from intl_data order by 1; set client_encoding = 'utf-8'; select * from intl_data order by 1; -- test \c test_enc_proxy set client_encoding = 'sjis'; select * from test_encoding(); set client_encoding = 'euc_jp'; select * from test_encoding(); set client_encoding = 'utf8'; select * from test_encoding(); select * from test_encoding2('クライアント側のデータ'); select * from test_encoding3('クライアント側のデータ'); \c template1 set client_min_messages = 'warning'; drop database if exists test_enc_proxy; drop database if exists test_enc_part; create database test_enc_proxy with encoding 'utf-8' template template0; create database test_enc_part with encoding 'euc_jp' lc_collate 'C' lc_ctype 'C' template template0; -- initialize proxy db \c test_enc_proxy set client_min_messages = 'warning'; \set ECHO none create extension plproxy; \set ECHO all set client_encoding = 'utf8'; create schema plproxy; create or replace function plproxy.get_cluster_version(cluster_name text) returns integer as $$ begin return 1; end; $$ language plpgsql; create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text) returns setof record as $$ begin return; end; $$ language plpgsql; create or replace function plproxy.get_cluster_partitions(cluster_name text) returns setof text as $$ begin return next 'host=127.0.0.1 dbname=test_enc_part'; return; end; $$ language plpgsql; create table intl_data (id int4, "コラム" text); create function test_encoding() returns setof intl_data as $$ cluster 'testcluster'; run on 0; select * from intl_data order by 1; $$ language plproxy; create function test_encoding2(text) returns setof intl_data as $$ cluster 'testcluster'; run on 0; select 0 as id, $1 as "コラム"; $$ language plproxy; create function test_encoding3(text) returns setof intl_data as $$ cluster 'testcluster'; run on 0; $$ language plproxy; -- initialize part db \c test_enc_part set client_min_messages = 'warning'; set client_encoding = 'utf8'; create table intl_data (id int4, "コラム" text); insert into intl_data values (1, 'リモートデータ'); create function test_encoding3(text) returns setof intl_data as $$ declare rec intl_data%rowtype; begin raise notice 'got: %', $1; rec := (3, $1); return next rec; return; end; $$ language plpgsql; set client_encoding = 'sjis'; select * from intl_data order by 1; set client_encoding = 'euc_jp'; select * from intl_data order by 1; set client_encoding = 'utf-8'; select * from intl_data order by 1; -- test \c test_enc_proxy set client_encoding = 'utf8'; set client_encoding = 'sjis'; select * from test_encoding(); set client_encoding = 'euc_jp'; select * from test_encoding(); set client_encoding = 'utf-8'; select * from test_encoding(); select * from test_encoding2('クライアント側のデータ'); select * from test_encoding3('クライアント側のデータ');