<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysql アーカイブ - WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</title>
	<atom:link href="https://system.analogengine.jp/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://system.analogengine.jp/tag/mysql/</link>
	<description>説明不要な画面レイアウトと操作性に優れたアクティビティを兼ね備えたWEBシステム開発</description>
	<lastBuildDate>Fri, 22 Mar 2024 07:39:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://system.analogengine.jp/wp-content/uploads/2023/06/cropped-favicon-32x32.jpg</url>
	<title>mysql アーカイブ - WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</title>
	<link>https://system.analogengine.jp/tag/mysql/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQLからMySQLへのテーブルデータ移行</title>
		<link>https://system.analogengine.jp/knowledge/postgresql_to_mysql/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 22 Mar 2024 07:33:49 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postgres]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1169</guid>

					<description><![CDATA[<p>PostgreSQL to MySQL PostgreSQLもまだまだ現役ですが、フロントエンジニアからすれば、ツールの充実などの都合でMySQLを選択せざるを得ない状況も増えてきました。PHPもまだまだ現役。なんとか一 &#8230; <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/" class="more-link">Continue reading<span class="screen-reader-text"> "PostgreSQLからMySQLへのテーブルデータ移行"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/">PostgreSQLからMySQLへのテーブルデータ移行</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1169" class="elementor elementor-1169" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-16fdf30 e-flex e-con-boxed e-con e-parent" data-id="16fdf30" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-337ab4c elementor-widget elementor-widget-heading" data-id="337ab4c" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">PostgreSQL to MySQL</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-024ba94 elementor-widget elementor-widget-text-editor" data-id="024ba94" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>PostgreSQLもまだまだ現役ですが、フロントエンジニアからすれば、ツールの充実などの都合でMySQLを選択せざるを得ない状況も増えてきました。PHPもまだまだ現役。なんとか一発でMySQLへの移行ができたらと思い、作りました。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-cbc58fd elementor-widget elementor-widget-code-highlight" data-id="cbc58fd" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp><?php

// PostgreSQLデータベースの設定を配列に保存します
$pgsql = [
    'host' => 'your_postgresql_host', // PostgreSQLのホスト
    'db' => 'your_postgresql_dbname', // 使用するデータベース名
    'user' => 'your_postgresql_user', // ユーザー名
    'password' => 'your_postgresql_password' // パスワード
];

// MySQLデータベースの設定を配列に保存します
$mysql = [
    'host' => 'your_mysql_host', // MySQLのホスト
    'db' => 'your_mysql_dbname', // 使用するデータベース名
    'user' => 'your_mysql_user', // ユーザー名
    'password' => 'your_mysql_password' // パスワード
];

// PostgreSQLデータベースにPDOを使用して接続します
$pgsqlConn = new PDO("pgsql:host={$pgsql['host']};dbname={$pgsql['db']}", $pgsql['user'], $pgsql['password']);

// publicスキーマ内の全てのテーブル名を取得するSQLクエリを実行します
$tablesResult = $pgsqlConn->query("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'");
$tables = $tablesResult->fetchAll(PDO::FETCH_COLUMN); // 結果を配列として取得

// 取得したテーブルごとに処理を行います
foreach ($tables as $table) {
    // MySQLデータベースにPDOを使用して接続します
    $mysqlConn = new PDO("mysql:host={$mysql['host']};dbname={$mysql['db']}", $mysql['user'], $mysql['password']);

    // 対象テーブルのカラム名とデータ型を取得します
    $columnsResult = $pgsqlConn->query("SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '{$table}'");
    $columns = $columnsResult->fetchAll(PDO::FETCH_ASSOC);

    // MySQLで使用するCREATE TABLE文を組み立てます
    $createTableSQL = "CREATE TABLE `{$table}` (";
    $colDefinitions = [];

    // 取得したカラムごとに処理を行います
    foreach ($columns as $column) {
        $colName = $column['column_name']; // カラム名
        $dataType = $column['data_type']; // データ型

        // PostgreSQLのデータ型をMySQLのデータ型に変換します
        switch ($dataType) {
            case 'character varying':
            case 'text':
                $mysqlDataType = 'TEXT';
                break;
            case 'integer':
                $mysqlDataType = 'INT';
                break;
            case 'timestamp without time zone':
                $mysqlDataType = 'TIMESTAMP';
                break;
            case 'date':
                $mysqlDataType = 'DATE';
                break;
            default:
                $mysqlDataType = 'TEXT'; // デフォルトではTEXT型を使用
        }

        $colDefinitions[] = "`$colName` $mysqlDataType"; // カラム定義を配列に追加
    }

    $createTableSQL .= join(', ', $colDefinitions) . ");"; // CREATE TABLE文を完成させます
    $mysqlConn->exec($createTableSQL); // MySQLでテーブルを作成

    // PostgreSQLからデータを選択し、MySQLに挿入します
    $pgsqlResult = $pgsqlConn->query("SELECT * FROM \"{$table}\"");

    while ($row = $pgsqlResult->fetch(PDO::FETCH_ASSOC)) {
        // カラム名を取得
        $columns = array_keys($row);
        // 値のプレースホルダーを生成
        $placeholders = array_fill(0, count($row), '?');
        // INSERT文を組み立て
        $insertSQL = "INSERT INTO `{$table}` (`" . implode('`, `', $columns) . "`) VALUES (" . implode(', ', $placeholders) . ")";

        // MySQLデータベースへのトランザクションを開始します
        $mysqlConn->beginTransaction();
        try {
            // INSERT文を準備し、値をバインドして実行します
            $stmt = $mysqlConn->prepare($insertSQL);
            $stmt->execute(array_values($row)); // PDOStatement::executeには値の配列を渡します
            $mysqlConn->commit(); // 変更をコミットし、トランザクションを終了します
        } catch (Exception $e) {
            // エラーが発生した場合、トランザクションをロールバックします
            $mysqlConn->rollBack();
            echo "エラー: " . $e->getMessage();
        }
    }
}
?>
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-e244872 elementor-widget elementor-widget-heading" data-id="e244872" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">文字コードに気をつけて</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-b4277b2 elementor-widget elementor-widget-text-editor" data-id="b4277b2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>カラム名に日本語を使ってる場合や、EUCからUTF8に移行する場合などは下記のmysqlへの接続部分を改変してください。じゃないと化けます。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-4a9416b elementor-widget elementor-widget-code-highlight" data-id="4a9416b" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>	$mysqlConn = new PDO("mysql:host={$mysql['host']};dbname={$mysql['db']};charset=utf8mb4", $mysql['user'], $mysql['password']);
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
					</div>
				</div>
				</div>
		<p>投稿 <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/">PostgreSQLからMySQLへのテーブルデータ移行</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
