プログラミングで飯を食え。腕をあげたきゃ備忘録!

PHP、JavaScript、HTML5、CSS3などWEB系言語を中心に基本テク、備忘録をまとめます。Android、Iphoneアプリ開発についても!

PostgreSQLでテーブルの所有者(オーナー)を一括変更する方法。

SELECT
    'ALTER TABLE ' || schemaname 
    || '.' || tablename || 
    ' OWNER TO 新しいオーナー名;'
FROM pg_tables 
WHERE tableowner ='もともとのオーナー'

こういうSQLを流すと、

オーナーを変更するALTER TABLEのSQLを吐いてくれますので、

それを実行しておしまい。

PHPでtableのHTMLをcsvとしてダウンロードする。

function table_tag2csv($buff) {
  $buff = preg_replace("/>[\s]+<",$buff);

  $buff = preg_replace("/^.*<table[^>]*>/Uis","",$buff);
  $buff = preg_replace("/<\/table>.*$/is","",$buff);

  $buff = preg_replace("/<([a-z]+) ([^>]+)>/i","<$1>",$buff);
  $buff = preg_replace("//i","",$buff);
  $buff = preg_replace("/<\/th>/i","",$buff);

  $buff = preg_replace("/<\/?[^(tr|td)<>]+>/i","",$buff);

  $buff = str_replace("\r\n","\n",$buff);
  $buff = preg_replace("/(\r|\n)/","\r\n",$buff);

  $csv = "";
  if(preg_match_all("/(.*)<\/tr>/iU",$buff,$trmatches)){
    foreach($trmatches[1] as $rows){
      if(preg_match_all("/(.*)<\/td>/iU",$rows,$tdmatches)){
        for($i=0;$i<count($tdmatches[1]);$i++){
          if(strpos($tdmatches[1][$i],",")!==false || strpos($tdmatches[1][$i],'"')!==false || strpos($tdmatches[1][$i],"\r\n")!==false){
            $tdmatches[1][$i] = '"'.str_replace('"','""',$tdmatches[1][$i]).'"';
          }
          $tdmatches[1][$i] = htmlspecialchars_decode($tdmatches[1][$i]);
        }
        $csv .= implode(',',$tdmatches[1]);
      }
      $csv .= "\r\n";
    }
  }

  header('Cache-Control: private, max-age=10800, pre-check=10800');
  header('Content-Disposition: attachment; filename="'.date("Y-m-d").'.csv"');
  header('Pragma: no-cache');
  header('Content-Type: text/comma-separated-values');
  header('Content-Length: ' . strlen($csv));

  return $csv;
}

引数にtableのHTMLを突っ込んで、

戻り値をechoすればOKです。

PHPで多次元配列を再帰的に空かどうかを確認する関数

    /*
     * 多次元配列を再帰的に空かどうかを確認する
     */
    function isEmpty($arr){
        $rtn = true;
        if(!empty($arr)){
            if(is_array($arr)){//配列なら
                $second_rtn = true;
                foreach($arr as $item){
                    $second_rtn = $this->isEmpty($item);
                    if(!$second_rtn){
                        $rtn = $second_rtn;
                        break;
                    }
                }
            }else{
                if(!empty($arr)){
                    $rtn = false;
                }
            }
        }
        return $rtn;
    }

こんな感じです。

空ならtrueが返ります。